2

如何在 CUDA 中分配共享变量?我有一个内核,需要在属于特定块的线程之间共享数据。sid我需要两个名为和的共享变量eid。我这样使用它:

extern __shared__ int sid, eid  

但这给了我一个错误,即__shared__变量不能具有外部链接。

4

1 回答 1

8

有两种分配共享内存的方法:静态和动态

1、静态

  __shared__ int Var1[10]

2、动态:应添加“extern”关键字

extern __shared__ int Var1[]

如果您使用动态方式分配共享内存,您应该在调用函数时设置共享内存大小。例如:
testKernel <<< grid, threads, size>>>(...)
第三个参数是共享内存的大小。这样所有的共享内存都从同一个地址开始。所以如果你想定义几个共享的记忆。您应该编写如下代码。

__global__ void func(...)
{
    extern __shared__ char array[];
    short * array0 = (short*)array;
    float * array1 = (float*)(&array0[128]);
}
于 2012-08-22T05:42:05.600 回答