我需要对大量数据进行排序,数百万个数组,每个数组都有数万个值。我想知道的是:
在GPU上实施并行排序算法并在所有阵列上运行是否更好
OR
实现单线程算法,如quicksort,并为GPU的每个线程分配不同的数组。
显然速度是最重要的因素。对于单线程排序算法,内存是一个限制因素。我已经尝试过实现一个递归的快速排序,但它似乎不适用于大量的数据,所以我假设存在内存问题。
要排序的数据类型很长,所以我不相信基数排序是可能的,因为数字的二进制表示太长了。
任何指针都会受到赞赏。
答案 0 :(得分:5)
排序是一项受到广泛关注的操作。如果您对高性能感兴趣,则不建议编写自己的排序。我会考虑使用thrust,back40computing,moderngpu或CUB来对GPU进行排序。
上面的大部分内容都是一次处理一个数组,使用完整的GPU对数组进行排序。有一些技巧可以做vectorized sort,它可以“同时”处理多个数组,而CUB也可以选择进行“每线程”排序(比方说,“每个线程块”)。
一般来说,我会对CPU排序代码说同样的话。不要自己写。
编辑:我想还有一条评论。我会倾向于你提到的第一种方法(即不对每个线程进行排序。)有两个相关的原因: