cuda - 减少模式中共享内存的银行冲突?
问题描述
我专注于 Mark Harris 的幻灯片Optimizing Parallel Reduction in CUDA中说明的银行冲突问题,我遇到了这个问题:
幻灯片 8 和 12 分别演示了分歧分支问题和非分歧解决方案,存在银行冲突问题。但是,这个问题只在幻灯片 12 中提到。
据我所知,每 4 个字节的数据(在这种情况下为整数)存储在一个内存库中。在这种情况下:
10 -> bank 1
1 -> bank 2
8 -> bank 3
.
.
.
每当一个warp的线程请求同一个bank中的字节时,就会出现bank冲突的问题。在幻灯片 8 中,所有 6 个线程(同一个 warp)都从不同的 bank 请求字节(没有 bank 冲突)。此外,在幻灯片 12 中,所有 6 个线程(同样,同一个 warp)正在从不同的银行请求字节(仍然没有银行冲突)。有人会澄清这个问题究竟是什么时候出现的吗?
解决方案
我想我错了。
在幻灯片 8 中,每个索引为 2i 的线程都在访问索引为 2i 的银行。因此线程 32(warp 中的最后一个线程)访问索引为 32 的 bank。因此,不会发生 bank 冲突(warp 中的任何线程都没有访问同一个 bank)。
在幻灯片 12 中,每个索引为 i 的线程正在访问索引为 2i 的银行。因此线程 32(warp 中的最后一个线程)访问索引为 64 的银行。访问模式分析表明,在这种情况下,每个线程访问同一个银行 2 次,这是一个严重的银行冲突。
推荐阅读
- linux - Shell Scripting ssh 执行命令
- vba - 如何找到数组的维数?
- javascript - 仅在“年龄”而不是“姓名”上的参考错误
- python - 将列表合并到数据框中
- c++ - 从 FbxAnimCurveNode 检索 FbxObject3D
- c++ - 当我在每一帧中多次使用正则表达式时,FPS下降
- html - 无法弄清楚如何设置这些图标的样式,以便它们具有不同的颜色
- python - Beautifulsoup python3 Howlongtobeat.com 提取名称(和其他元素)
- java - 如何将用户硬币存储在 Firebase 数据库中并检索它们?
- python - Tensorflow:TypeError:Fetch参数None的类型无效