Parallel processing CUDA对多个向量/数组进行排序

Parallel processing CUDA对多个向量/数组进行排序,parallel-processing,cuda,gpgpu,thrust,Parallel Processing,Cuda,Gpgpu,Thrust,我在GPU内存中有很多(200000)个整数向量(每个向量中大约有2000个元素) 我正在尝试并行化算法,该算法需要对每个向量进行排序、计算平均值、标准偏差和偏度 在下一步中,算法必须删除最大元素并重复计算统计矩,直到每个向量独立地不满足某些标准 我想问问更有经验的人,什么是并行化该算法的最佳方法 是否可以一次对多个向量进行排序 也许不是将排序并行化,而是将整个算法作为一个线程进行并行化更好吗 200000个整数向量。。。每个向量中有2000个元素。。。在GPU内存中 2000个整数听起来像是单

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

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

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

我想问问更有经验的人,什么是并行化该算法的最佳方法

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

也许不是将排序并行化,而是将整个算法作为一个线程进行并行化更好吗

200000个整数向量。。。每个向量中有2000个元素。。。在GPU内存中

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

正如@Talonmes所建议的,您可能可以使用cub's,但我不太确定这样做是否正确。您可能可以使用推力来完成这项工作,但也有可能会有大量开销和复杂的代码(尽管我可能错了)。认真考虑修改现有的(bitonic)排序内核,甚至编写自己的内核——尽管这对正确操作更具挑战性

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

也许不是将排序并行化,而是将整个算法作为一个线程进行并行化更好吗


这取决于当前应用程序在这些排序工作上花费的时间相对于其整个运行时间。有关上述内容的更正式说明,请参见。话虽如此-通常,当GPU内存中已经有数据时,并行化排序应该是值得的。

讨论了[block wide CUB functions]()可能具有实现所需的所有并行原语同时对多个向量进行排序。问如何做6件事是一个非常宽泛、难以回答的问题。您可能希望一次解决一个问题。