在CUDA中分配共享变量

在CUDA中分配共享变量,cuda,Cuda,如何在CUDA中分配共享变量?我有一个内核,需要在属于特定块的线程之间共享数据。我需要两个名为sid和eid的共享变量。我是这样使用它的: extern __shared__ int sid, eid 但是它给了我一个错误,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu变量不能有外部链接。分配共享内存有两种方法:静态和动态 1、静态 __shared__ int Var1[10] 2、动态:应添加“外部”关键字 如果使用动态方式分配共享内存,则在调用函

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

extern __shared__ int sid, eid  

但是它给了我一个错误,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
变量不能有外部链接。

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

1、静态

  __shared__ int Var1[10]
2、动态:应添加“外部”关键字

如果使用动态方式分配共享内存,则在调用函数时应设置共享内存大小。例如:
testKernel>(…)

第三段是共享内存的大小。这样,所有共享内存都从同一地址开始。所以如果你想定义几个共享的记忆。您应该编写如下代码

__global__ void func(...)
{
    extern __shared__ char array[];
    short * array0 = (short*)array;
    float * array1 = (float*)(&array0[128]);
}

如果这个函数是设备函数,我从全局函数调用它,那么如何实现呢?你可以将共享内存地址传递给设备function@Samuel如果在全局函数之外声明共享内存,则该共享内存应该在中由文件中的其他设备函数可见,不?我认为答案是肯定的。你可以编写一个测试平台来测试它。我认为在全局函数之外声明共享内存是不好的,怎么可能使用
float**array
而不是
float*array0
float*array1
?在这种情况下,
float**
的存储也应该动态分配。
__global__ void func(...)
{
    extern __shared__ char array[];
    short * array0 = (short*)array;
    float * array1 = (float*)(&array0[128]);
}