减少奇数元素CUDA

Reduction of odd number of elements CUDA

好像只能对奇数个元素进行归约。例如,它需要对数字求和。当我有偶数个元素时,它会是这样的:

1 2 3 4
1+2
3+3
6+4

但是当我有时该怎么办,例如1 2 3 4 5?最后一次迭代是三个元素之和 6+4+5 还是什么?我看到了同样的问题 here,但找不到答案。

并行归约将首先添加元素对:

1  1+3   4+6
2  2+4
3
4

您的元素数量为奇数的示例通常实现为:

1  1+4  5+3  8+7
2  2+5  7+0
3  3+0
4  0+0
5
0
0
0

也就是说,通常并行缩减将使用一组 2 的幂线程,并且最多一个线程块(最后一个)将少于完整的数据来处理。处理此问题的常用方法是将数据零填充到线程块大小。如果你研究 cuda parallel reduction 示例代码,你会找到这样的例子。