Upcoming SlideShare
×

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

3,700 views

Published on

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

Published in: Sports, Technology
0 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

• Be the first to like this

Views
Total views
3,700
On SlideShare
0
From Embeds
0
Number of Embeds
3,115
Actions
Shares
0
4
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

1. 1. Before LISPs Just Part of the Past 〜 #6 Introduction to Harlan 〜
2. 2. ある日寄せられたお便り 最近こんな感じのSchemeベースなGPGPU言語 が出たらしいよ
3. 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. 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. 5. GPU Computing? ● GPUに普通の計算をさせる ● データをGPUメモリに送り GPUで計算させて 結果をGPUメモリから取り出す ● コアをたくさん積んでるので並列処理向き ● GPU鬱
6. 6. OpenCL ● 異種計算資源混在環境での並列計算のための言 語仕様 – GPUに限定しない ● eg) Cell – Appleが提案、Khronosが策定 ● なのでMacでは環境を整えやすい
7. 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. 8. 並列化構文 ● kernel – vectorに対するmap演算の並列処理 – 入れ子にもできる ● reduce – vectorに対する畳み込み演算の並列処理
9. 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. 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. 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. 12. reduce ● (reduce + (kernel ((x v0) (y v1)) (* x y))) ● 第一引数はユーザ定義の２引数関数でも良い
13. 13. その他の構文 ● let, let*, if ● for – 並列化されないループ構文 ● return – main以外はreturn書かなくても値を返せる
14. 14. 気になった点 ● Scheme上に作られた言語ではない – Schemeで書かれたコンパイラ – Schemeではない ● マクロが定義できない ● コンパイラがびっくりするほど遅い – 2011年のMacbook Airだとhelloworldが3分かかる – Petitを使ってるからか？ ● ユーザガイドなどに関数一覧とか構文一覧とかがない
15. 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版が生成される