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との親和性
    • データ型にOpenGLを意識したデータ型があって,後でOpenGLでの描画に使えるみたい.計算結果をホスト側のメモリに移さず,そのまま描画に使えるのは嬉しい.

まだ実装が無いのが何だけど,ざっと見た感じ悪くなさそう.