OpenCLを始めたい
とりあえず、OpenCL Programming Guide for Mac OS X等を読んだ。
いろいろとわかったこと。
- GCDと同様に、システムはワークキューを基本として作られている。キューにカーネル(コンパイルされた関数)を登録して、データを投入していく。
- GCDと同様に、オブジェクトはリファレンスカウントで管理される。
- 実行順は保証されないのが基本。イベントを作り、waitする。
- というか、AppleのCPU側OpenCLはGCDを基盤として実装されている。
- OpenCLはデバイスが対応していればただの関数もkernelとして実行できる。http://www.khronos.org/opencl/sdk/1.0/docs/man/xhtml/clEnqueueNativeKernel.html
- includeのようなプリプロセサ命令が使え、-Iとか-Dのような常識的なコマンドラインオプションも与えることができる。
- CPUとしてカーネルを作るときは、stdioやprintfが使える( ! )
- メモリアクセスに関する境界チェックは無い
- サンプルに移植性が無い。OpenCL/cl.hは__APPLE__なときだけ(他はCL/cl.h) http://www.khronos.org/registry/cl/api/1.0/opencl.h 、platformを省略できるのもAppleだけ(実装依存)。http://developer.amd.com/Support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71
一番疑問に思ったのは、これGPUで実装できるんだろうかということ。。あとはデバッグか。ATIの実装もそうだけど、コンパイルしたあとgdbでアタッチしろはちょっと男らしいような気が。