我正在尝试使用GPU执行缩减,即从数组的所有元素中查找最大值。有一个来自Nvidia here的教程,让我们说幻灯片7是最简单的方法
我唯一的问题是我的阵列很大!它可以达到40亿个元素。从幻灯片7中的示例代码开始,需要在块共享内存和全局内存之间来回复制,并且在我目前的理解中使用全局内存来存储所有元素是无法避免的。此存储超过2GB的显卡内存。
有没有办法用这么大的数组进行减少,还是图形硬件的当前限制?
PS:在未来的扩展版本中,我还计划了超过40亿个元素
答案 0 :(得分:1)
减少是一种可以在块中执行的操作。
最简单的解决方案是在GPU上分配两个数据缓冲区和两个结果缓冲区,然后通过执行缩减内核重叠传输到GPU。当GPU忙时,您的CPU可以减少连续GPU减少的输出。这样,您可以分摊大部分数据传输成本,并处理部分缩减结果。
您可以使用标准的还原内核NVIDIA提供CUDA示例来完成所有这些操作。