Man*_*ete 7 cuda gpu gpgpu nvidia
我知道使用1D数组时的动态分配,但是如何在使用2D数组时完成?
myKernel<<<blocks, threads,sizeofSharedMemoryinBytes>>>();
....
__global__ void myKernerl(){
__shared__ float sData[][];
.....
}
Run Code Online (Sandbox Code Playgroud)
假设我要分配2D共享内存数组:
__shared__ float sData[32][32];
Run Code Online (Sandbox Code Playgroud)
怎么能动态完成?将会:
myKernel<<< blocks, threads, sizeof(float)*32*32 >>>();
Run Code Online (Sandbox Code Playgroud)
正确编写后,必须在每个内核调用执行配置(in <<<blocks, threads, sizeofSharedMemoryinBytes>>>)之前指定动态分配的共享内存的大小.除了静态分配的内存之外,它还指定了此调用的每个块动态分配的共享内存中的字节数.恕我直言,没有办法访问2D阵列这样的内存,你必须使用1D阵列,并像2D一样使用它.最后想一想,不要忘记限定词extern.所以你的代码应该是这样的:
sizeofSharedMemoryinBytes = dimX * dimY * sizeof(float);
myKernel<<<blocks, threads,sizeofSharedMemoryinBytes>>>();
....
__global__ void myKernerl() {
extern __shared__ float sData[];
.....
sData[dimX * y + x] = ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3438 次 |
| 最近记录: |