« リアル引越し準備中。kioku未来のことを語る | メイン | 広い部屋 »

2008年10月19日

CUDAプログラミングの愚痴

というわけで,CUDAをはじめたわけだが,
わかりにくいねぇコレwww
たしかに,mallocして,memcpyしてcuda処理してってくらいなら
簡単だけど,グラフィックスプログラムとからめようとすると
考えること増えてるし,いわゆるGPGPUのプログラムから楽になることは一つもない
しかも,いろいろ気をつけてかかないと,パフォーマンスでないから
なかなか思うようにかけない.

まず,計算ユニットはベクター型風(nVidiaはスカラ型といってる)なのに
CUDAの最小処理単位はスカラ型で書くようになっている
そのくせ,メモリアクセスはベクター風にアクセスしないとパフォーマンスが
でないからややこしい.(コアレスアクセス)
しかも,スカラだけで考えた計算もできるしSIMDのような計算もできる(同期命令を用いて)
たとえば,1pixelあたり16スレッドの協調動作のプログラムもかけるし,
16pixelそれぞれにスレッドを割り当てた動作もかけるというわけ.
どっちがはやいのかわかんねぇ

メモリアクセスもコアレスアクセスしないとだめだよとかいいながら
CUDAZoneのサンプルとかみるとみんな軒並みテクスチャキャッシュつかってね?
結局なんだかんだいって,キャッシュ頼みじゃねーねかw
しかもCUDAでテクスチャつくるのけっこうめんどいし・・・
デバッグとかもまじやりづらい.テクスチャ経由でごにょごにょするなら
いわゆるGPGPU的なプログラムでやったほうが楽な気がしてきた.
GPGPU的な方法ならどういう風にスレッドを割り当てるかどうかはドライバとかが
やってくれるので特に考える必要がない(きっとnVidiaが一番いい値を設定してるにちがいない
とくにスキャッタ的な操作がないのであれば,グラフィックスプログラマは
普通にGPGPUのプログラムを書いた方が楽かもしれない.

あとCUDAコミュニティの日本語サイトができてるんだけど
先週まで投稿者ほぼゼロだったのに人間が増え始めてるなw
CUDAフォーラム

投稿者 kioku : 2008年10月19日 21:57