gpt4 book ai didi

cuda - 部分相同地址访问是否会导致 CUDA 中的 Bank 冲突?

转载 作者:行者123 更新时间:2023-12-01 22:23:41 27 4
gpt4 key购买 nike

我读了一些关于 CUDA 编程的教程。他们中的大多数人提到“如果半扭曲的所有线程访问相同的地址,则不存在存储体冲突(广播)”。我的问题是,部分相同的地址访问是否会导致CUDA共享内存中的存储体冲突?

假设每个 warp 有 32 个线程,那么 half-warp 将有 16 个线程。

(1) 如果所有 16 个线程都访问 Bank0 上的同一地址 A,则自广播后就不会出现 Bank 冲突。

(2) 但是,如果 Thread-{0,1,...,6,7} 想要访问 Bank0 上的地址 A,而 Thread-{8,9,...,14,15} 想要访问,该怎么办Bank1 上的地址 B?我想知道会不会有银行冲突。由于并非所有half-warp线程都访问相同的地址(只有half-halfwarp访问相同的地址),因此会出现存储体冲突。

如果我的理解有误,请指正。非常感谢!

最佳答案

对于计算能力 1.x(CUDA 7 不再支持哪些设备),a single broadcast word允许每个非库冲突的共享内存访问周期。

对于计算能力 2.0 及更高版本,假设所有这些广播字都来自不同的存储体,则在单个非存储体冲突的共享内存访问周期中允许使用任意数量的广播字。

Documentation :

and unlike for devices of compute capability 1.x, multiple words can be broadcast in a single transaction

半扭曲的讨论仅与 cc1.x 设备相关。在您的情况 2 中,在 cc1.x 设备上,需要对两次访问进行序列化,一次针对地址 A,一次针对地址 B。这在行为上相当于 2 路存储体冲突。在您的情况 2 中,对于 cc2.0 及更高版本,不会出现银行冲突。

关于cuda - 部分相同地址访问是否会导致 CUDA 中的 Bank 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com