GPGPU(General Purpose computing on GPU)

西尾さんが最近ブログでCUDAについて書いていてちょっと調べてみた。CUDAはNVIDIAが開発しているGPGPUをするための言語を含む統合環境らしい。ちなみにGPGPUはグラフィック描画のためのGPUを汎用的な目的で使用するための技術。NVIDIAのCg、OpenGLのGLSL、DirectXのHLSLなどの同様な言語があるが、特殊なコーディングを必要とする。CUDAはほとんど余計なコードを必要としないらしい。CUDAに似たものとしてOpenCL(Open Computing Language)というものがあるらしい。


CUDAもOpenCLもどちらもC言語ベースということで、今後はよりC言語が重要になるのか、JavaPythonなどの言語にも徐々に対応していくのか不明。とりあえず標準的なもの1つに絞られるまで待つのは良いかもしれない。確実性や迅速な対応ということであれば、C言語を使用するのが確実だと思う。CythonなどでPythonC言語化してOpenCLでビルドというのは、コードの修正が2度も必要になって2度手間だと思う。


いずれにしてもすごい時代になってきた。GPUがCPUの100倍の速度出てCPUの代わりになるのであれば、CPUはどういったところで使われるのだろう?使い分けが分からない。今後は自動的に処理を振り分けてくれるようになってくるのかな?Intel TBBによるマルチスレッドプログラミングなどもどうなるのか不明だが、いずれにしてももう少し落ち着くまで待った方が良さそう。いつの時代もそうであるように、いずれはハードウェアをあまり意識せずソフトウェア開発をできるようになってくると思う。ハードウェアに応じでコーディングを変えるというのは基本的に一時的にとかしょうがなくだと思う。