注册和共享内存取决于编译计算能力?

时间:2011-05-17 23:15:12

标签: compiler-construction cuda nvcc

嘿那里, 当我用nvcc -arch=sm_13编译时,我得到:

ptxas info    : Used 29 registers, 28+16 bytes smem, 7200 bytes cmem[0], 8 bytes cmem[1] 

当我使用nvcc -arch=sm_20时,我得到:

ptxas info    : Used 34 registers, 60 bytes cmem[0], 7200 bytes cmem[2], 4 bytes cmem[16] 

我认为所有内核参数都传递给共享内存但是对于sm_20,它似乎不是......?! 也许他们也被传递到寄存器?我的函数的头部如下所示:

__global__ void func(double *, double , double, int)

到目前为止感谢!

2 个答案:

答案 0 :(得分:4)

正如@talonmies所述,共享内存差异是由于SM 2.x设备通过常量而不是共享内存传递内核参数。

然而,SM 2.x器件中寄存器使用的主要区别之一是SM 1.x器件具有用于加载和存储指令的专用地址寄存器,而SM 2.x使用通用寄存器作为地址。这往往会增加SM 2.x的套准压力。幸运的是,GF100(SM 2.0)与GT200(SM 1.3)相比,寄存器文件也大2倍。

答案 1 :(得分:3)

在计算能力2.x设备中,内核的参数存储在常量内存中。寄存器差异可能取决于版本之间为数学库函数生成的代码的差异。在内核中是否存在超越函数或sqrt