もう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()byte | 65536()byte | 65536()byte |
ブロックあたりのShared Memory 容量 | 16384()byte | 16384()byte | 16384()byte |
ブロックあたりのレジスタ数 | 個 | 個 | 個 |
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がコア数になっているハズです。しかし、これだけでも性能の差が歴然としていますなぁ…