减少Cuda中任意数量的元素

use*_*276 0 reduce cuda gpu

我如何实现以下链接中给出的代码的第7版:http : //www.cuvilib.com/Reduction.pdf
,其输入数组的大小为任意数,换句话说,不是2的幂。

Rob*_*lla 5

版本7已经可以处理任意数量的元素。

也许您不应该参考cuvilib链接,而应该查看相关NVIDIA CUDA 减少样本的链接。它本质上包括正在使用的pdf文件,但实现降低也样本代码1至7(标记为reduce0通过reduce6

如果您研究文档中关于归约7的描述,您会看到初始的归约步骤是通过while循环处理的,这导致网格在内存中循环。当它遍历内存时,每个线程都在累积多个缩减元素。

此初始while循环不限于特定的问题大小(例如2的幂)。

由于通过该while循环对减少量进行了初始处理,因此可以在线程块级别以2的超高效乘方来完成后续步骤,如该文档先前所讨论的那样。但是初始输入集大小不限于2的幂。

请研究CUDA示例(reduce6)中给出的代码。