首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以为同一网格中的不同块声明不同的共享内存?

是否可以为同一网格中的不同块声明不同的共享内存?
EN

Stack Overflow用户
提问于 2014-06-12 09:56:47
回答 1查看 194关注 0票数 0

我已经问过这个问题了,HERE,但没有得到满意的答案。也许是因为我把多个问题都包含在了那个问题里。我的问题是是否允许为同一网格的不同块声明不同的共享内存。

例:

代码语言:javascript
复制
Dx = blockDim.x;
Dy = blockDim.y;
Bx = BlockIdx.x;
By = BlockIdx.y;

if(By==0)
 {
  if (Bx==0)
  {
   __shared__ bds[5][5];
  }
  else if (Bx==(Dy-1))
  {
   __shared__ bds[6][6];
  }
  else
  {
   __shared__ bds[5][6];
  }
}

上面的代码是内核代码的一部分。我正在尝试将特定数量的共享内存分配给特定的块。这种行为在数据自动化系统中允许吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-12 16:48:03

既然目标已经停止了摇摆,现在有一个具体的、稳定的问题需要回答:

是的,这是完全可能的,但请注意

  1. 每个静态定义的共享内存变量在内核中都有限制作用域,这将使代码结构比需要的要复杂得多。
  2. 编译器将为您在共享内存中定义的每个变量发出单独的静态共享内存预留。如您所述,如果内核具有9个有条件定义的本地作用域共享内存分配,则内核将使用静态保留进行编译,该保留是所有9个变量静态定义大小的总和。
  3. 第2点意味着,即使有条件地声明了不同的共享内存分配,每个块的共享内存量也是相同的。

第二点和第三点意味着,你提议的方案没有任何规模、效率的提高。事实上恰恰相反。您的内核将需要更多的共享内存,而不是只有一个静态声明的共享内存,这是每种情况下所需的最大内存,并相应地进行了编码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24181507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档