2009-07-23 OpenCLプログラミングセミナー行ってきた OpenCL 朝10時から16時30分までみっちりセミナー受けてきた。 OpenCLプログラミングセミナー 以下、気が付いたことをまとめ。 背景 クロックアップ競争が限界に達した 演算コアを複数搭載することで計算量を増やす 現在、汎用CPUは4コア程度でしかないが、GPUならGeforce 8でも128個の演算ユニットを内蔵している 現状ではNVIDIAのCUDA、IBMのCell SDKなどハードに依存したフレームワークが実装されている OpenCLではこれらのハードに対して、統一したフレームワークで開発することが出来る OpenCLとは ヘテロジニアス並列コンピューティング環境のためのフレームワーク Open Computing Language OpenCL Architecture: 環境要件 OpenCL C Programming Language: 並列演算デバイスのプログラミング環境 OpenCL Runtime: デバイスを制御するホストのAPI 異なるデバイス間での互換性はソース互換。 デバイスのコードはOpenCL C言語で記述し、コンパイル後のバイナリはハード依存 構造 ホストとデバイスで構成される ホストはデバイスの制御するためのプロセッサ。従来の例なら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 いずれ対応環境を増やす予定 いずれは半自動で並列化したい 並列化 アムダールの法則: コード全体のうち、何割が並列化できるのか データ並列とタスク並列 データ並列は同じロジックに対して、分割されたデータを並列に流し込む タスク並列は異なるロジックが並列に実行される。相互の依存関係がクリアされる必要がある その他 OpenCL C言語のコンパイル後のバイナリはハード依存であるため、デバッグ環境の共通化は仕様に入っていない模様 仕様に規定されない部分は当然実装依存。kernelの再帰呼び出しなど NVIDIAの実装の場合、CUDAとOpenCLではいずれも同じ程度の計算能力になる Microsoftは賛同してない 全体的にCUDAの汎用版という感じ。 まずは実装が出てこないとなんとも言えない。 FIXSTARTSというとCellというイメージだったのだが、FOXCは対応しないのかな 自分で使えるようになるのはSnow Leopardからかなぁ。