如何让线程块中的每个线程都有自己的共享内存指针?我找到了一些此类指针声明的示例:
int __shared__ *p;
__shared__ int array[256];
p = &array[threadId];
Run Code Online (Sandbox Code Playgroud)
这是正确的还是有其他方法?
不,这不是正确的方法。在该示例代码中,p
是共享的,因此这意味着块中的每个线程都将尝试访问同一块内存。如果threadId
是块的唯一线程索引,您可以这样做:
int *p;
__shared__ int array[256];
p = &array[threadId];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器将使用寄存器或线程本地内存来array
为块中的每个线程在静态共享内存分配中存储元素的唯一地址。