5

我刚刚注意到我的 CUDA 内核使用的空间恰好是“理论”计算的空间的两倍。例如

__global__ void foo( )
{
    __shared__ double t;
    t = 1;
}

PTX 信息显示:
ptxas 信息:_Z3foov 的函数属性,0 字节堆栈帧,0 字节溢出存储,0 字节溢出加载
ptxas 信息:使用 4 个寄存器,16 字节 smem,32 字节 cmem[0]

但是双倍的大小只有 8。

更多示例:

__global__ void foo( )
{
    __shared__ int t[1024];
    t[0] = 1;
}

ptxas 信息:使用了 3 个寄存器,8192 字节 smem,32 字节 cmem[0]

有人可以解释为什么吗?

4

1 回答 1

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]

在这种情况下会有一些共享内存开销,但使用量并没有翻倍。

于 2013-04-11T17:31:45.443 回答