使用交错寻址方法并行减少存储冲突

Posted

技术标签:

【中文标题】使用交错寻址方法并行减少存储冲突【英文标题】:Bank conflict in parallel reduction using interleaved addressing method 【发布时间】:2017-04-05 07:42:31 【问题描述】:

我正在阅读 Mark Harris 的关于在 CUDA 中优化并行缩减的演示文稿。这是一张我遇到问题的幻灯片:

它说这种方法存在银行冲突问题。但为什么?所有线程都在访问不同存储体中的两个连续存储单元。它们都不会同时访问特定的内存单元。

【问题讨论】:

【参考方案1】:

此演示文稿可追溯到 CUDA 的早期阶段,适用于第一代硬件。

该硬件具有以 8 个 32 位组排列的共享内存。因为共享数组中的每八个条目都驻留在同一个 bank 中,所以该归约树的多个级别都存在 bank 冲突。

此问题已在较新的硬件中得到解决,其中银行的数量扩大到 32 个,这意味着不会发生这种银行冲突。

【讨论】:

当线程都从 32 的倍数(* 4 字节)的地址中读取时,是否仍然会发生这种情况? @mirgee:解决方案是使用顺序寻址而不是交错寻址。因此,所有 8 次写入都将进入不同的存储区,并且完全没有冲突。请参阅developer.download.nvidia.com/assets/cuda/files/reduction.pdf 的幻灯片 14。

以上是关于使用交错寻址方法并行减少存储冲突的主要内容,如果未能解决你的问题,请参考以下文章

Hash算法

减少共享内存库冲突

ElasticSearch - 并行调用 UpdateByQuery 和 Update 导致 409 冲突

HASH方法课下补分博客

HashMap是怎么解决哈希冲突的?

解决hash冲突的方法