在Cuda中减少任意数量的元素

在Cuda中减少任意数量的元素,cuda,gpu,reduce,Cuda,Gpu,Reduce,如何实现以下链接中给出的代码的版本7: 对于大小为任意数的输入数组,换句话说,不是2的幂?版本7已处理任意数目的元素 也许您不应该参考cuvilib链接,而应该查看相关NVIDIA CUDA的链接。它基本上包括您正在使用的pdf文件,但也包括实现缩减1到7的示例代码(标记为reduce0到reduce6) 如果您研究文档中的简化7的描述,您将看到初始简化步骤是通过while循环处理的,这会导致网格在内存中循环。当它在内存中循环时,每个线程都在累积多个还原元素 该初始while循环不限于问题的特

如何实现以下链接中给出的代码的版本7:

对于大小为任意数的输入数组,换句话说,不是2的幂?

版本7已处理任意数目的元素

也许您不应该参考cuvilib链接,而应该查看相关NVIDIA CUDA的链接。它基本上包括您正在使用的pdf文件,但也包括实现缩减1到7的示例代码(标记为
reduce0
reduce6

如果您研究文档中的简化7的描述,您将看到初始简化步骤是通过while循环处理的,这会导致网格在内存中循环。当它在内存中循环时,每个线程都在累积多个还原元素

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

由于最初是通过这个while循环来处理缩减的,所以后面的步骤可以在threadblock级别以2的超高效功率完成,正如该文档中之前讨论的那样。但初始输入集大小不限于2的幂


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

版本7已处理任意数量的元素

也许您不应该参考cuvilib链接,而应该查看相关NVIDIA CUDA的链接。它基本上包括您正在使用的pdf文件,但也包括实现缩减1到7的示例代码(标记为
reduce0
reduce6

如果您研究文档中的简化7的描述,您将看到初始简化步骤是通过while循环处理的,这会导致网格在内存中循环。当它在内存中循环时,每个线程都在累积多个还原元素

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

由于最初是通过这个while循环来处理缩减的,所以后面的步骤可以在threadblock级别以2的超高效功率完成,正如该文档中之前讨论的那样。但初始输入集大小不限于2的幂


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

您可以将数组中的零填充到下一个2的幂次方,尽管填充一个数组以解决一个限制为两个大小幂次的问题(实际上,这一个不是)肯定会“让它工作”,在缩减的情况下,当性能本质上是内存带宽的函数时,我们可以提出病态问题大小(如2^n+1),其中填充将使执行时间大约翻倍。您可以使用0填充数组,使其达到下一个2的幂次方,尽管填充数组的问题仅限于两个大小的幂次(实际上,这一个不是)肯定会“让它工作”,在减少的情况下,性能本质上是内存带宽的函数,我们可能会产生病态问题大小(例如2^n+1),其中填充将使执行时间大约加倍。