OpenCL
の仕様が公開されたそうなので,少し見てみる.というか,KhronosのOpenCLのページからたどれるPDF資料が良くまとまっている.
ざっと見た所の感想:
- データ並列性を利用する所は,CUDAに類似している
というか,NVIDIAが入ってるんだから,当然なんだろうけど.
-
- 仮定しているPlatform Modelというのを見ると,HostとCompute Deviceというのに分かれていて,Compute Deviceというのが,GPU(的な物)に相当する様子.で,Compute Deviceの中には,複数のCompute Unitがあり,Compute Unitの中には,複数のProcessing Elementがあるという階層構造になっている.で,階層ごとに共有されるメモリがあると.
- 計算は,KernelというCの関数に相当するようなものを,各Processing Elementで行います.ここで,Kernelを呼び出す時は,ある範囲の計算を(SPMD的に)並列に複数のProcessing Elementに行ってもらいます.Kernel側では,自分の担当範囲を,特殊な関数から得られるようにしていると.(つーか,文章だと説明しにくいなぁ.前述のPDFのp.17〜p.19とp.44位を見た方が良い?)
- タスク並列性というのもあるらしい.
- ん〜,あんまり詳しく説明されてないなぁ.処理は全般的にキューに突っ込む形で行うみたいなんだけど,その中の一つとして計算処理もある,という感じか.
- プログラムは実行時にコンパイルする
- ちょっと驚くけど,OpenGLのShading LanguageであるGLSLでもそうなってたから,まぁそんなもんかも知れん.これによって,下位のハードウェアに依存しなくなりますね,と.
- OpenGLとの親和性
まだ実装が無いのが何だけど,ざっと見た感じ悪くなさそう.