CUDAをはじめてみる(1)

GPUを使うと計算速度が桁違いに上がることがあることは前にも紹介した。
しかし、GPUを動かすためのシェーダプログラミングはやや独特で、それ以上にGPUを動かすための準備に膨大なコードが必要で、かつ見通しも悪い。そこでCUDAである。


http://www.nvidia.co.jp/object/cuda_home_jp.html


「CUDA」は、なぜか「くーだ」と発音するらしい。
これを使えばかなりプログラムがシンプルになる。Cのみで書くことができ、シェーダプログラミングも要らなくなる、ことはないが、GPUを意識せずに書くことができる。意識したほうがいいとは思うが。
今まで、VC2008ではCUDAは使えなかったので手を出していなかった。年末にCUDA2.1Betaがリリースされ、VC2008もサポートされたので、少し使ってみた。なかなかいい感触をもった。やっぱりコードが少なくて済むのはいい。手直しするのが楽。


GPUを使うと平気で1CPUより200倍くらい速くなったりする(8コアなら25倍だが)。ただ、GPUは魔法の杖だが万能ではない。


GPGPUの2009年を占う


これによると、GPGPUは結局あまりはやらないかもしれない。これはそうかもしれない。GPUの使い方は、データを一度にまとめて送って、それに対して猛烈な計算を並行で行って、データをまとめて戻してくる。こういう処理は猛烈に速い。ただ、こういう計算というのはそんなに多くの場面ではない。元々はゲームのグラフィックスに使っていたので、それを除くと、科学技術計算とかHPC(High Performance Computing)とか言う分野が考えられるが、これは一般ユーザとはあまり関係ない。今、PCで時間がかかるのはどういうところだろう。起動が遅い、というのはGPUでは速くならない。せいぜい、エンコードが速くなる、くらいではないだろうか。これが人工知能的に使われて、例えば翻訳の精度がよくなるということがあるといいが、実際にできるのだろうか。


しかし、そんなことは関係ない。ある課題に対して、どうやったらGPUを効率的に使えるか、これを考えるのが面白いのだ。それをこれからやっていきたい。