• Like
Before LISPs Just Part of the Past ~#6 Introduction to Harlan~
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Before LISPs Just Part of the Past ~#6 Introduction to Harlan~

  • 3,305 views
Published

Intorduce Harlan, a new programming language for data parallel programming.

Intorduce Harlan, a new programming language for data parallel programming.

Published in Sports , Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,305
On SlideShare
0
From Embeds
0
Number of Embeds
4

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Before LISPs Just Part of the Past 〜 #6 Introduction to Harlan 〜
  • 2. ある日寄せられたお便り 最近こんな感じのSchemeベースなGPGPU言語 が出たらしいよ
  • 3. ある日寄せられたお便り (module (extern nanotime () -> u64) (define-datatype point3_t (point3 float float float)) (define (make-points N) (kernel ((i (iota N))) (point3 (int->float i) (int->float i) (int->float i)))) (define (point-diff x y) (match x ((point3 a b c) (match y ((point3 d e f) (point3 (- a d) (- b e) (- c f))))))) (define (point-add x y) (match x ((point3 a b c) (match y ((point3 x y z) (point3 (+ a x) (+ b y) (+ c z))))))) (define (point-div a y) (match a ((point3 a b c) (point3 (/ a y) (/ b y) (/ c y))))) (define (point-mag p) (match p ((point3 a b c) (sqrt (+ (* a a) (+ (* b b) (* c c))))))) (define (nbody bodies) (kernel ((i bodies)) (reduce point-add (kernel ((j bodies)) (let* ((diff (point-diff i j)) (d (point-mag diff))) (if (< 0 d) (point-div diff (* (* d d) d)) (point3 0 0 0))))))) (define (main) (let* ((bodies (make-points 1000)) (start (nanotime)) (forces (nbody bodies)) (stop (nanotime))) (print "Computed ") (print (length forces)) (print " forces in ") (print (/ (- stop start) 1000000)) (println "ms")) (return 0)))
  • 4. Harlan ● ``Harlan is a new programming language for GPU Computing'' - 作者ブログより ● OpenCLにコンパイルされるLisp風言語 – Indiana大学のEric Holk作 – コンパイラはChez Schemeで書かれた ● OpenCLとChez Schemeが必要 – Petit Chez Schemeでも可
  • 5. GPU Computing? ● GPUに普通の計算をさせる ● データをGPUメモリに送り GPUで計算させて 結果をGPUメモリから取り出す ● コアをたくさん積んでるので並列処理向き ● GPU鬱
  • 6. OpenCL ● 異種計算資源混在環境での並列計算のための言 語仕様 – GPUに限定しない ● eg) Cell – Appleが提案、Khronosが策定 ● なのでMacでは環境を整えやすい
  • 7. Hello Harlan ● Harlan is a language for data parallelism that has its roots in C and Scheme - Harlan User's Guideより ● (module (define (main) (print “Hello, world”) (return 0))) ● これparenの多いCなんじゃ...
  • 8. 並列化構文 ● kernel – vectorに対するmap演算の並列処理 – 入れ子にもできる ● reduce – vectorに対する畳み込み演算の並列処理
  • 9. kernel ● (kernel ((x (vector 0 2 4)) (y (vector 1 3 5))) (+ x y)) ● Thread 0 : (+ x y) ● Thread 1 : (+ x y) ● Thread 2 : (+ x y)
  • 10. kernel ● (kernel ((x (vector 0 2 4)) (y (vector 1 3 5))) (+ x y)) ● Thread 0 : (+ x y) ● Thread 1 : (+ x y) ● Thread 2 : (+ x y)
  • 11. 入れ子のkernel ● kernelは入れ子に記述することで2次元配列の 各要素に触るような処理をすることもできる (kernel ((line field)) (kernel ((point line)) (/ 2 point))) 8 1 6 3 5 7 4 9 2 4 0 3 1 2 3 2 4 1
  • 12. reduce ● (reduce + (kernel ((x v0) (y v1)) (* x y))) ● 第一引数はユーザ定義の2引数関数でも良い
  • 13. その他の構文 ● let, let*, if ● for – 並列化されないループ構文 ● return – main以外はreturn書かなくても値を返せる
  • 14. 気になった点 ● Scheme上に作られた言語ではない – Schemeで書かれたコンパイラ – Schemeではない ● マクロが定義できない ● コンパイラがびっくりするほど遅い – 2011年のMacbook Airだとhelloworldが3分かかる – Petitを使ってるからか? ● ユーザガイドなどに関数一覧とか構文一覧とかがない
  • 15. 参考資料 ● 作者Eric Holkのブログ http://blog.theincredibleholk.org/blog/2013 /06/28/announcing-the-release-of-harlan/ ● ソース https://github.com/eholk/harlan ● Harlan User's Guide – ソースのdocディレクトリにある – xelatexが使える環境ならmake docsでpdf版が生成される