cuda - GPU 2D共享内存动态分配

标签 cuda gpu nvidia gpgpu gpu-shared-memory

我知道一维数组的动态分配,但是对于二维数组如何实现呢?

    myKernel<<<blocks, threads,sizeofSharedMemoryinBytes>>>();
    ....

__global__ void myKernel(){
    __shared__ float sData[][];
    .....
}

假设我想分配一个 2D 共享内存数组:

__shared__ float sData[32][32];

如何动态地完成它?会不会是:

myKernel<<< blocks, threads, sizeof(float)*32*32 >>>();

最佳答案

正如您所正确编写的那样,您必须在执行配置中调用每个内核之前指定动态分配的共享内存的大小(在 <<<blocks, threads, sizeofSharedMemoryinBytes>>> 中)。这指定了共享内存中的字节数 除了静态分配的内存之外,还会为此调用动态分配每个 block 。恕我直言,无法访问二维数组等内存,您必须使用一维数组并像二维一样使用它。最后想想,别忘了限定符 extern 。所以你的代码应该是这样的:

   sizeofSharedMemoryinBytes = dimX * dimY * sizeof(float);

   myKernel<<<blocks, threads,sizeofSharedMemoryinBytes>>>();
     ....

   __global__ void myKernerl() {

       extern __shared__ float sData[];
       .....
       sData[dimX * y + x] = ...
   }

关于cuda - GPU 2D共享内存动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195766/

相关文章:

cuda - GPU设备号不匹配

cuda 11内核不运行

c++ - 让应用程序拥有 CPU 和 GPU 计算后端的最佳方式是什么

linux - CUDA 是否正确安装在我的 Ubuntu 10.04 上?一些样本不运行。

cuda - NVIDIA __constant内存: how to populate constant memory from host in both OpenCL and CUDA?

keras - 由 SageMaker 管理的 AWS ml.p2.xlarge 实例上的 Keras/Tensorflow 未检测到 GPU

cuda - CUDA 设备功能如何工作?

c++ - CUDA/推力图像处理

cuda - cuda.h、cuda_runtime.h、cuda_runtime_api.h 之间的区别

c++ - 使用 CUDA 转置 : Inquiry on program in Blog