OpenCLプログラミングセミナー行ってきた

朝10時から16時30分までみっちりセミナー受けてきた。

以下、気が付いたことをまとめ。

背景

  • クロックアップ競争が限界に達した
  • 演算コアを複数搭載することで計算量を増やす
  • 現在、汎用CPUは4コア程度でしかないが、GPUならGeforce 8でも128個の演算ユニットを内蔵している
  • 現状ではNVIDIAのCUDA、IBMのCell SDKなどハードに依存したフレームワークが実装されている
  • OpenCLではこれらのハードに対して、統一したフレームワークで開発することが出来る

OpenCLとは

構造

  • ホストとデバイスで構成される
  • ホストはデバイスの制御するためのプロセッサ。従来の例ならx86のCPU
  • バイスは並列演算を実行する。従来の例ならGPUやCellのアクセラレータ
  • OpenCL C言語でkernelを作る。このkernelとはデバイスで実行されるコード
  • ホストのコードは通常のC言語などで作る。OpenCL Runtimeをリンクし、標準化されたAPIを使ってデバイスを制御する

実装

  • まだちゃんと使える実装はない
  • NVIDIAもリリース未定
  • Mac OS X Snow LeopardではOpenCL対応と発表
  • FOXC
    • FIXSTARSの実装
    • 現状ではホストIntel CPU、デバイスIntel CPU
    • いずれ対応環境を増やす予定
    • いずれは半自動で並列化したい

並列化

  • アムダールの法則: コード全体のうち、何割が並列化できるのか
  • データ並列とタスク並列
  • データ並列は同じロジックに対して、分割されたデータを並列に流し込む
  • タスク並列は異なるロジックが並列に実行される。相互の依存関係がクリアされる必要がある

その他

全体的にCUDAの汎用版という感じ。
まずは実装が出てこないとなんとも言えない。
FIXSTARTSというとCellというイメージだったのだが、FOXCは対応しないのかな
自分で使えるようになるのはSnow Leopardからかなぁ。