もう2月ですね。

あぁ、終わってる。自分の勘違いに気がついてとても落ち込んでいる。

そんなことはどうでもいいんだけど、本当にCUDAが難しいと思います!なんでこんなにメモリがいっぱいあるんですか?

 レジスタ、ローカルメモリ、コンスタントメモリ、シェアードメモリ、グローバルメモリ、テクスチャメモリ。Cudaを使うにあたってこれらのメモリの特性はそれぞれ覚えておかなければいかねい。まず、コンスタント、グローバル、テクスチャ、ローカルはチップ外にある。シェアードとレジスタはチップ内にある。当然、レジスタとシェアードを工夫して使っていくことで計算速度を早くすることができる。なぜなら、チップ外とチップ内で転送速度が100倍近く違うので…

 それはいいとして、GPUの性能って実際のところどうなってるんだろ。自分はearly 2009モデルのMac Book Proを使っているのですが、なんとGPUが二つ入っています。でも、デフォルトの設定では9400Mしか使われていません。これはCUDAのdeviceQueryというサンプルを動かしてみると分かります。環境設定から9600Mも使ってくれるようになるんだけど…ここで性能比較してみる。

性能 GeForce9400M GeForce9600M GeForce GTX 285
Compute Capability 1.1 1.1 1.3
Global Memory 容量 266010623byte 536543232byte 2146762752byte
マルチプロセッサ 2 4 30
コア数 16 32 240
Constant Memory 容量 65536($2^{16}$)byte 65536($2^{16}$)byte 65536($2^{16}$)byte
ブロックあたりのShared Memory 容量 16384($2^{14}$)byte 16384($2^{14}$)byte 16384($2^{14}$)byte
ブロックあたりのレジスタ $2^{13}$ $2^{13}$ $2^{14}$
Warp size 32 32 32
ブロックあたりの最大スレッド数 512 512 512
ブロックの各次元の最大数 512*512*64 512*512*64 512*512*64
グリッドの各次元の最大数 65535*65535*1 65535*65535*1 65535*65535*1
クロック数 1.10GHz 1.25GHz 1.48GHz


いままでここらへんのことがぼんやりしていたのでこの表を作ってよかったかも。

やっぱりモバイル用のGPUと本格的GPUは桁違いなんですねぇ…まず一番目に付く違いがコア数…
ここで注意していただきたいのはマルチプロセッサ数=Streaming MultiProcessor数、コア数=Streaming Processor数。
マルチプロセッサ内にはコアが8個あるので、どれもマルチプロセッサ数*8がコア数になっているハズです。しかし、これだけでも性能の差が歴然としていますなぁ…