首页 > 解决方案 > 减少模式中共享内存的银行冲突?

问题描述

我专注于 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)正在从不同的银行请求字节(仍然没有银行冲突)。有人会澄清这个问题究竟是什么时候出现的吗?

标签: cuda

解决方案


我想我错了。

在幻灯片 8 中,每个索引为 2i 的线程都在访问索引为 2i 的银行。因此线程 32(warp 中的最后一个线程)访问索引为 32 的 bank。因此,不会发生 bank 冲突(warp 中的任何线程都没有访问同一个 bank)。

在幻灯片 12 中,每个索引为 i 的线程正在访问索引为 2i 的银行。因此线程 32(warp 中的最后一个线程)访问索引为 64 的银行。访问模式分析表明,在这种情况下,每个线程访问同一个银行 2 次,这是一个严重的银行冲突


推荐阅读