十亿元素阵列的 GPU 缩减

GPU reduction for billion-element array

我正在尝试用GPU进行归约,即从一个数组的所有元素中找出最大值。 Nvidia 有一个教程 here,假设最简单的方法是幻灯片 7

我唯一的问题是我的数组太大了!它可以达到40亿个元素。从slide 7的示例代码来看,需要在block shared memory和global memory之间来回copy,我目前的理解无法避免使用global memory来存储所有元素。此存储超过 2GB 显卡显存。

有没有什么办法可以用这么大的阵列来减少这个数量,还是图形硬件的当前限制?

PS: 未来的扩展版本,我也计划超过40亿个元素

缩减是一种可​​以分块进行的操作。

最简单的解决方案是在 GPU 上分配两个数据缓冲区和两个结果缓冲区,然后在执行缩减内核时重叠传输到 GPU。您的 CPU 可以在 GPU 繁忙时减少连续 GPU 减少的输出。这样您就可以分摊大部分数据传输成本和部分缩减结果的处理成本。

您可以使用 NVIDIA 随 CUDA 示例提供的标准缩减内核来完成所有这些操作。