ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2012年04月20日

CUDA GPU 並列処理

OpenMPはCPUに並列処理させる仕組みだったが、CUDAはGPUにそれをやらせる仕組み。NVidiaが作ってる?らしい。

面白いのは、GPUに渡すコードをCの構文で直接ソースコードに書けること。GPUは並列処理得意中の得意なので、それを描画以外の処理に使っちゃおう、ということだ。

CUDA入門・サンプル集

CUDA(Wiki)

試してないのであまり大したことは書けないが、コストとしてGPUに演算に必要なデータを送り送られする処理、(おそらく)実行時にGPUに実行コードを転送する処理分が上乗せされるので、それなりに重い処理をできるだけまとめてやらせるのがよいと思われる。
あとこれは推測だが、GPUはCPUではないので、あまりでかい処理をするのは制約があるのではなかろうかと思う。
関数はホスト(CPU)側を呼び出す仕組みはあるようだが、あまり頻繁にCPUを呼び出しているとそこで排他処理が入ってGPUで超絶並列処理をしている意味が相当低下するだろう。
そのため、ある程度の関数はGPU側で用意してくれているようだ。
例えばすぐ思いつくのは数学関数だが、三角関数sinは
__sinf
はデバイス(GPU)側で処理される(SFUというGPUで処理される高速な数学関数)関数らしい。


なんとなくFM-8とか7のサブCPUのことを思い出した自分は古い人間なんだろうな。
posted by みこあいさ at 16:26| C++