CUDA排序许多矢量/阵列

问题描述 投票:1回答:1

我在GPU内存中有很多(200 000)个整数向量(每个向量大约2000个元素)。

我试图并行化算法,需要对每个向量进行排序,计算平均值,标准偏差和偏度。

在下一步中,算法必须删除最大元素并重复计算统计矩,直到每个矢量独立地满足某些标准。

我想问一个更有经验的人,这种算法并行化的最佳方法是什么。

是否可以一次对多个矢量进行排序?

也许更好的是不将并行排序,但整个算法作为一个线程?

parallel-processing cuda gpgpu thrust
1个回答
2
投票

200 000个整数向量...每个向量中的2000个元素......在GPU内存中。

2000个整数听起来就像单个GPU块可以轻松解决的问题。它们适合于它的共享内存(或者它的寄存器文件,但由于各种原因而没有用),所以你不需要在全局内存中对它们进行排序。 200,000个向量= 200,000个块;但是你不能拥有2000块线程 - 那就太多了

你可能能够使用cub的block radix sort,正如@talonmies建议的那样,但我不太确定这是正确的做法。你可能能够用推力做到这一点,但你也很有可能会有很多开销和复杂的代码(尽管我可能错了)。认真考虑调整现有的(bitonic)排序内核,甚至编写自己的内核 - 尽管这样做更难以做到。

无论如何,如果你编写自己的内核,你可以在排序数据后编写“下一步”代码。

也许更好的是不将并行排序,但整个算法作为一个线程?

这取决于您的应用程序当前相对于整个运行时间在这些分类工作上花费的时间。另请参阅Amdahl's Law以获得更正式的上述声明。话虽如此 - 当你已经拥有GPU内存中的数据时,通常应该值得并行排序。

© www.soinside.com 2019 - 2024. All rights reserved.