常量内存问题的答案

_梦魇花葬 2014-06-27 10:42:42
加精
回顾上一篇帖子的问题:
有一个大小为16KB的数据结构,每个线程块以随机的方式对其访问,但每个线程束都以统一的方式对其访问。该数据结构最好用寄存器、常量内存还是共享内存进行保存,为什么?

我们作如下分析:
尽管将一个比较大的数组放入寄存器中有些麻烦,但将每个线程的寄存器按块进行划分将获得最快的访问速度,无论访问方式是怎么样的。然而,我们必须将寄存器分配给每个线程进行计算。只要程序访问片外存储,然吃就会阻塞整个SM。因此,如果要事该方案成为一个好方案,则需要绝大多数的操作都是基于寄存器的。
接下来,很多小伙伴提到了共享内存,共享内存确实是一个好的解决方案,然偶16KB的共享内存几乎消耗了1.x设备上的一个SM所有共享内存。然而在计算能力在2.x和3.x的硬件上,这个限制每个SM最多处理三个线程块。
最后,在计算能力为1.x的设备上,常量内存也是一个比较合理的选择。常量内存的广播机制对于线程有很大的帮助。然而,常量内存的缓存放不下16KB的数据。另外,更重要的是常量内存的缓存是针对线性访问优化过的,也就是说,每次访问都是基于缓存行获取的。因此,靠近初始访问数据将被缓存。非基于缓存行的访问将导致缓存未命中,造成的损失比直接访问全局内存还要大。

因此,共享内存在2.x和3.x计算能力的GPU上是一个好的选择,它提供了本应该在计算能力为1.x的设备上支持的常量内存广播机制。

根据回答的情况,决定将积分分给2楼、7楼和10楼的小伙伴,因为2楼和7楼的小伙伴回答正确,因此分别给予40积分,10楼的小伙伴由于没有回答正确,但积极参与,给予20积分奖励~
...全文
901 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦竹 2014-07-05
  • 打赏
  • 举报
回复
史上最给力楼主
my03131302 2014-07-03
  • 打赏
  • 举报
回复
@否极泰来@ 2014-07-02
  • 打赏
  • 举报
回复
学习学习
腹黑的大象 2014-07-02
  • 打赏
  • 举报
回复
学习学习
assassin5616 2014-07-02
  • 打赏
  • 举报
回复
引用 15 楼 u011209709 的回复:
我还是觉得这个没有看懂呀!
同样没看懂。楼主写的是驱动?为什么没有普通内存这个选项。
yangqiang71 2014-06-30
  • 打赏
  • 举报
回复
学习。。。。
nettman 2014-06-30
  • 打赏
  • 举报
回复
GW786228836 2014-06-30
  • 打赏
  • 举报
回复
学习
George_J_Su 2014-06-30
  • 打赏
  • 举报
回复
我还是觉得这个没有看懂呀!
austin9972 2014-06-29
  • 打赏
  • 举报
回复
xusir98 2014-06-29
  • 打赏
  • 举报
回复
Kiln 2014-06-29
  • 打赏
  • 举报
回复
学习。。
cattpon 2014-06-28
  • 打赏
  • 举报
回复
又进来学习了~
laoer_2002 2014-06-28
  • 打赏
  • 举报
回复
学习
hugh_z 2014-06-28
  • 打赏
  • 举报
回复
learning
卖水果的net 2014-06-28
  • 打赏
  • 举报
回复
看到了,学习了。
getoneking 2014-06-27
  • 打赏
  • 举报
回复
不错,挺好的的

581

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧