首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这是一个无冲突的内存库访问?

为什么这是一个无冲突的内存库访问?
EN

Stack Overflow用户
提问于 2014-03-19 17:58:49
回答 1查看 459关注 0票数 6

以下是来自CUDA C编程指南的图片:

指南说,这是一个无冲突访问的例子,因为线程3、4、6、7和9访问银行5中的同一个单词。

我不太明白为什么这种冲突是没有冲突的,因为不仅线程3、4、6、7和9在同一个银行中访问相同的工作(难道这不是内存冲突的一个例子吗?)而且线程5必须访问银行4。

你能给我解释一下这个案子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 19:43:40

请注意,银行与共享内存中的单词或位置不是一回事。银行是指共享内存中满足某种地址模式条件的所有单词。

通常,如果从一个翘曲(或cc 1.x中的半曲)访问到单独的银行,则可以避免共享内存库冲突。只要来自每个线程的请求以单独的银行为目标,这些访问就不必处于翘曲顺序,即它们可以被置乱。

上面的描述涵盖了图表中的每一个箭头,除了那些指向银行5的箭头。

如果我们没有其他信息,那么多支箭头将显示出一家银行的潜在冲突。

但是,有一个例外,当访问不仅访问相同的银行,而且它们在内存中存储相同的单词。当多个共享内存请求以内存中的同一个单词为目标时,共享内存系统具有一个广播机制,用于在一个周期内接收该单词中包含的数据,并将其服务于所有请求线程。

来自文档(http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared-memory-1-x):

共享存储器具有广播机制,在处理一个内存读取请求时,可以同时读取32位字并将其广播到多个线程。这减少了在同一个32位字内从一个地址读取多个线程时银行冲突的数量。

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

https://stackoverflow.com/questions/22514331

复制
相关文章

相似问题

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