GPUでのBlur
GPUでBlurを行っているサンプルがいくつかあるので試してみた。
RadeonのOpenCLのSampleにBoxBlurがあったので見てみたところ、カーネルサイズが固定なのと入出力がファイルで画面表示が無いので確認が少ししづらい。あとアルゴリズム的にスライドして処理していないので無駄が多い。ソースコードはOpenCLの部分がかなり読みやすいけれど、Cで行ってるOpenCLのセットアップ処理がかなり手続きが面倒くさそうな感じだった。
NVIDIAのCUDA SDKのサンプルにBoxFilterがあったので見てみたところ、縦方向の処理でcoalesceしていないせいか、結構処理速度が遅い。recursiveGaussianのサンプルは実行結果は滑らかだけどこれも大きい画像を使うと遅い。転置2回もしているからじゃないのかな…。。fps表示が何故か正しくないので速いと勘違いしてしまったけど実際は遅い。
自分が今使っているノートPCのGPUの性能が低いというのがあるけれど(NVIDIA GeForce 9600M GT)、GPUで書けばCPUより100倍ぐらい処理が速くなる!っていうのはやはり有り得ないみたいだ。でもたくさんあるコアに連続的なデータを渡せば効率的に処理出来るっぽいので凄く魅力的だ。うまく書けばCPUより数倍高い性能を出せるかもしれない。
http://d.hatena.ne.jp/iitaku/20081116/1226861509
CUDAのSDKのサンプルで謎なのが、GPUで処理をしているのにCPUの使用率が高くなってしまう事だ…。GPUで処理してるんだから他の事にCPUを使えるようにして欲しいけれど…。