CUDAハードウェア仕様のさまざまな定数

CUDAのアーキテクチャは複雑怪奇でその仕様にはさまざまな定数が乱舞している。
忘れがちなのは次のような仕様。かっこの中はC1060での数値となっている。

  • 1ブロックはSM(ストリームマルチプロセッサ)一つにしか割り当てられない。つまり、SM数(C1060ではSM数が240個)以上のブロックを生成して同時に走らせない限り、寝ているSMが存在してしまい最大のパフォーマンスは出せない
  • 同時に走るスレッド数の最大値が決まっている。(C1060では768個)この同時に走る、という意味はこのスレッド数だけプロセッサのコアがあるという意味ではなく、レジスタの容量をすべてのプロセッサで共有しているため、一つのスレッドに割り当てられるレジスタの数から計算して、このスレッド数がレジスタとメモリーの間でページングを起こさない、ギリギリのスレッド数である、というのがこの前のミーティングでの推測である。これが具体的にどういったハードウェア制約によって決められているのかはかなり話し合ったのだが結局結論は出なかった。