2014年12月19日 10:00
コンピュータアーキテクチャの話 (319) CPUに比べて圧倒的に多いレジスタ数
という単位では、65,536レジスタがあるが、SMXは最大2048スレッドを並列に実行するので、この場合、平均的に各スレッドが使用できるレジスタ数は32ということになる。
このようにスレッドあたりで見ると、GPUのレジスタ数はCPUとあまり変わらない。CPUの場合は、整数演算用のレジスタと浮動小数点演算用のレジスタが独立に存在するのが一般的であるが、GPUの場合は、整数も浮動小数点数も同じレジスタを使う。このため、各スレッドが使えるレジスタ数としては、GPUの方がレジスタ数が少なく制約がきついとも言える。
ただし、GPUの場合は各スレッドが同じ数のレジスタを使うとは限らず、NVIDIAのGPUでは、コンパイル時に何個のレジスタを使うかを指定できるようになっている。ただし、少数のレジスタしか使わないようにすると、レジスタに入りきらない値はメモリに格納し、必要になったらメモリから読み出して使うというケースが増え、性能は低下する。一方、切り替えるスレッド数が少ない場合は、スレッドあたりで使用できるレジスタ数は増加し、メモリへの退避、復元の回数を減らせる。しかし、切り替えるスレッド数を減らしすぎると実行時間の長い命令では命令のレーテンシが見えてきて待ちが生じてしまうというトレードオフが存在する。