GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

GeForceの父がCUDAの解説

 http://journal.mycom.co.jp/articles/2007/09/13/nvidia/003.html

 概要は別のサイトで数日前にありましたが、マイコミの記事は結構詳しくて面白いです。

 で、話の内容はTesla*1とCUDA*2がメインだったみたいですね。

 この記事を読むまで知らなかったのですが、C言語で書いたソースをCUDAのコンパイラコンパイルしても、GPUネイティブの命令は生成されないみたいですね。

 私が理解した範囲では、コンパイル時にCPUで実行するコードとGPUカーネルコード*3を生成。実際に実行するタイミングでGPUカーネルコードをGPUネイティブのコードに変換するらしいです。

 で、GPUネイティブコードに変換するのはCUDAドライバで、こいつがGPU世代間の命令セットの差を吸収してくれる&GPUの仕様に応じて最適化したコードを吐くから、プログラマGPUの世代や仕様を気にしなくていい、って事みたいです。

 イメージとしてはJavaと似た様なものでしょうか。こっちもコンパイラが中間コードを吐いて実行時にネイティブコードに変換しますから。

 ついでに、この記事を読んでようやくCUDAドライバの必要性が理解出来ました。

 今までは「GPUネイティブのコードに変換するんだから、ドライバ不要なんじゃね?」と思ってましたから。

*1:GeForce 8800ベースのGPGPU向け機器

*2:NVIDIAGPGPU

*3:GPUで実行するコード