当指定 GPU 架构时,使用该选项编译的 CUDA 内核--ptxas-options=-v
似乎显示错误的 lmem(本地内存)统计信息。sm_20
这同样为架构提供了有意义的 lmem 统计信息sm_10 / sm_11 / sm_12 / sm_13
。
有人可以澄清 sm_20 lmem 统计数据是否需要以不同的方式阅读,或者它们是完全错误的?
这是内核:
__global__ void fooKernel( int* dResult )
{
const int num = 1000;
int val[num];
for ( int i = 0; i < num; ++i )
val[i] = i * i;
int result = 0;
for ( int i = 0; i < num; ++i )
result += val[i];
*dResult = result;
return;
}
--ptxas-options=-v
并sm_20
报告:
1>ptxas info : Compiling entry function '_Z9fooKernelPi' for 'sm_20'
1>ptxas info : Used 5 registers, 4+0 bytes lmem, 36 bytes cmem[0]
--ptxas-options=-v
并sm_10 / sm_11 / sm_12 / sm_13
报告:
1>ptxas info : Compiling entry function '_Z9fooKernelPi' for 'sm_10'
1>ptxas info : Used 3 registers, 4000+0 bytes lmem, 4+16 bytes smem, 4 bytes cmem[1]
sm_20 报告一个4 bytes的 lmem ,如果您看到内核中使用了 4x1000 字节数组,这根本不可能。较旧的 GPU 架构报告正确的4000 字节lmem 统计信息。
这是用CUDA 3.2试过的。我参考了NVCC 手册(v3.2) 的打印代码生成统计部分,但它无助于解释这种异常情况。