我刚注意到我的CUDA内核使用的空间是“理论”计算的空间的两倍。 e.g。
__global__ void foo( )
{
__shared__ double t;
t = 1;
}
PTX信息显示:
ptxas info:_Z3foov的函数属性,0字节堆栈帧,0字节溢出存储,0字节溢出加载
ptxas info:使用了4个寄存器,16个字节的smem,32个字节的cmem [0]
但双人的大小只有8。
更多示例:
__global__ void foo( )
{
__shared__ int t[1024];
t[0] = 1;
}
ptxas info:使用3个寄存器,8192个字节的smem,32个字节的cmem [0]
有人可以解释原因吗?
答案 0 :(得分:1)
似乎问题已经在当前的CUDA编译器中消失了。
__shared__ int a[1024];
使用命令'nvcc -m64 -Xptxas -v -ccbin /opt/gcc-4.6.3/bin/g++-4.6.3 shmem.cu'编译
ptxas info : Used 1 registers, 4112 bytes smem, 4 bytes cmem[1]
在这种情况下有一些共享内存开销,但使用量不会翻倍。