似乎只能对奇数个元素进行归约。例如,它需要对数字求和。当我有偶数个元素时,它会是这样的:
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 的幂线程,并且最多一个线程 block (最后一个)将少于完整的数据来处理。处理此问题的常用方法是将数据零填充到线程 block 大小。如果你研究cuda parallel reduction示例代码,您会找到这方面的示例。
关于cuda - 减少奇数元素CUDA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815198/