减少奇数元素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 示例代码,你会找到这样的例子。
好像只能对奇数个元素进行归约。例如,它需要对数字求和。当我有偶数个元素时,它会是这样的:
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 示例代码,你会找到这样的例子。