CUDA中指向共享内存的本地指针

stu*_*hlo 1 cuda

如何让线程块中的每个线程都有自己的共享内存指针?我找到了一些此类指针声明的示例:

int __shared__ *p;
__shared__ int array[256];

p = &array[threadId];
Run Code Online (Sandbox Code Playgroud)

这是正确的还是有其他方法?

tal*_*ies 5

不,这不是正确的方法。在该示例代码中,p是共享的,因此这意味着块中的每个线程都将尝试访问同一块内存。如果threadId是块的唯一线程索引,您可以这样做:

int *p;
__shared__ int array[256];

p = &array[threadId];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器将使用寄存器或线程本地内存来array为块中的每个线程在静态共享内存分配中存储元素的唯一地址。

  • 不,那是不正确的。您可以放心地忽略该线程中的所有内容 - 从 2008 年开始,CUDA 是新的,编译器是原始的,并且没有多少人了解语言扩展的细节以及它们如何映射到硬件。 (2认同)