关于内核函数中申请动态共享内存

  • 1 replies
  • 17 views
关于内核函数中申请动态共享内存
« 于: 十二月 29, 2018, 10:09:16 pm »
    问题是这样的,我想在内核函数中动态的申请共享内存达到跟之前用静态共享内存同样的功能,也就是下面的代码所示__globla__ void kernel(PtrStepSzImage)
{       int i = threadIdx.x;
   int j = threadIdx.y;
   int x = threadIdx.x + blockDim.x * blockIdx.x;
   int y = threadIdx.y+ blockDim.y *  blockIdx.y;}
      _shared__ float temp[32][32];
        temp[j] = Image(y, x);
   __syncthreads();   
 }

但是关于这里如何申请二维的共享内存数组以及如何将相应Id的全局内存的矩阵的值写入到该共享内存中很疑惑。    查了很多资料 只看到一段这样的代码
   __global__ void kernel(int *out)
    {//dynamic shared memory
        extern __shared__ int tile[];
       // mapping from thread index to global memory index
     unsigned int row_idx=threadIdx.y*blockDim.x+threadIdx.x;
     unsigned int col_idx=threadIdx.x*blockDim.y+threadIdx.y;

     //shared memory store_operation
      tile[row_idx]=row_idx;

      //wait for all threads to complete
    __synchreads();

      // shared memory load operation
     out[row_idx]=tile[col_idx];
    }
这段代码就看的很不明白,不知道能不能用。
求[名词2]看看







(无标题)
« 回复 #1 于: 一月 02, 2019, 12:18:17 pm »
请参考Kernel启动配置章节(本论坛的Sisiy妹子的阅读手册100天上有)。

里面有讲述如何用<<<>>>语法,在启动kernel的时候,指定动态分配的Shared Memory大小。

(注意,使用动态分配的Shared Memory需要你自行推断指针。)
(注意,如果同时使用了静态+动态分配的Shared Memory, 则实际大小为两者总和)
请阅读手册相关章节,获取更多信息。