这是从CUDA C编程指南中获取的图像:

该指南说这是无冲突访问的示例,因为线程3,4,6,7和9访问银行5内的相同单词.
我不太明白为什么这个没有冲突,因为不仅线程3,4,6,7和9访问同一个库中的相同工作(不应该是内存冲突的例子吗?)而且线程5必须访问银行4.
你能告诉我这个案子吗?
请注意,银行与共享内存中的单词或位置不同.银行集体指共享存储器中满足特定地址模式条件的所有单词.
通常,如果从warp(或cc 1.x中的半warp)的所有访问都转到单独的bank,则可以避免共享内存库冲突.这些访问不需要是扭曲顺序,即它们可以被加扰,只要来自每个线程的请求针对单独的存储体.
以上描述涵盖了图表中的每个箭头,但指向银行5的箭头除外.
如果我们没有其他信息,那么针对单个银行的多个箭头将表明潜在的银行冲突.
但是,有一个例外,当不仅访问目标是同一个存储区,而且它们在内存中定位相同的字.当多个共享内存请求以内存中的相同字为目标时,共享内存系统具有广播机制,用于获取该字中包含的数据,并在一个周期内将其提供给所有请求线程.
从文档(http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared-memory-1-x):
共享存储器具有广播机制,在处理一个存储器读取请求时,可以同时读取32位字并将其广播到多个线程.当多个线程从同一个32位字内的地址读取时,这减少了存储体冲突的数量.