似乎只能对奇数个元素进行缩减。例如,它需要总结数字。当我有多个元素时,它将是这样的:
1 2 3 4
1+2
3+3
6+4
但我有什么可以做的,例如1 2 3 4 5
?最后一次迭代是三个元素6 + 4 + 5的总和还是什么?我看到同样的问题here,但找不到答案。
答案 0 :(得分:4)
并行缩减将首先添加元素对:
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示例代码,你会发现这个例子。