2015年3月28日土曜日

OpenCL1.2のあれこれ

OpenCL1.2をいじってたので、それのまとめ

OpenCLはなんなのかというと
グラボを使って、処理を並列化させて高速化させましょうね というGPGPUのフレームワークの一種です。
ちなみに3秒かかる処理とかを0.03秒ぐらいにはなります。(kinectの全ピクセルに対する法線計算)

じゃあ、他のGPGPUと何が違うのって話になるんだけど、OpenCLだと
違うグラボであっても動くということ

いまのところ
・Radeon
・Intel
・NVIDIA
の三種のグラボがあるんだけど、普通はNVIDIA用のプログラムとかIntel用のプログラムとかを書かなくちゃいけないんだけど、
OpenCLだとそのへんを意識しなくてもいける

で、そのOpenCLの1.2使った感想からいうと
・Intelは動かない
・Radeonは多少プログラム間違えててもなぜか動く
・NVIDIAは少しでも間違ってくるとプログラムを落とす

ちなみに試したのは
・Intel(Intel HD 4000)
・Radeon(ATI Radeon HD 6750M)
・NVIDIA(NVIDIA GeForce GT 750M)
で全部Mac

OpenCLはプログラムをビルドする必要があるんだけど、
Intelのグラボを使おうとするとそもそもビルドが通らない
調べてみたらどうもMacだと使えないらしくWindowsでbootして、SDKを入れたら動くようになるらしい

RadeonとNVIDIAについて特にいうことはないです。
適当に書くとバグのもとなのでちゃんと書きましょう(反省)

あと、どうもOpenCLの開発はOpenGLと同じ会社らしく
連携させることで描画の高速化とかバッファをOpenCL同士で受け渡せる らしい

描画の高速化は結構常識っぽいんだけど、バッファをOpenCL間(正確にはカーネル間)で受け渡せるが結構重要な割にはマイナーなネタな気がする。
なんで重要かというと、OpenCLはGPUへのバッファの受け渡しが一番時間かかるから
なので、バッファをOpenCL間受け渡しできるなら、かなり高速化できる
次にいじる機会があったらやってみようと思います。
ちなみにhttps://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateFromGLBuffer.htmlの話ですね


0 件のコメント:

コメントを投稿