cuda - 在 CUDA 中分配共享变量

标签 cuda

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

extern __shared__ int sid, eid  

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

最佳答案

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

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]);
}

关于cuda - 在 CUDA 中分配共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12066730/

相关文章:

c++ - 我的机器上 OpenCV 算法的 GPU 版本比 CPU 版本慢?

c++ - 在 CUDA 中求解稀疏正定线性系统

docker - 将 nvidia 运行时添加到 docker 运行时

cuda - Thrust:如何直接控制算法调用的执行位置?

cuda - NVIDIA GRID vGPU 上 guest VM 的 CUDA 内核的行为

cuda - CUDA 中指令重放的其他原因

cuda - 每个 SM 的最大居民 block 数?

cuda - 什么时候真正需要填充共享内存?

c++ - 如何在 VS2019 CUDA 项目中启用 C++17 代码生成

c++ - 如何在 Visual Studio 2010 中启动 CUDA 应用程序?