我同时使用了并行快速排序算法和PSRS算法,该算法本质上将快速排序与合并相结合。
使用Parallel Quicksort算法,我已经演示了多达4个核(具有超线程的双核)的近乎线性的加速,鉴于算法的局限性,这是可以预期的。纯Parallel Quicksort依赖共享的堆栈资源,这将导致线程之间的争用,从而降低任何性能提升。该算法的优势在于它可以“就地”排序,从而减少了所需的内存量。如您所述,当向上排序100M个元素时,您可能需要考虑这一点。
我看到您正在寻找在具有8-32核的系统上进行排序的方法。PSRS算法避免了在共享资源上的争用,从而可以加快进程数。我已经展示了多达4个内核的算法,但是其他人的实验结果却表明,线性加速几乎达到32个内核,甚至更多。PSRS算法的缺点是它不就位,并且需要更多的内存。
如果您有兴趣,可以对每种算法使用或仔细阅读我的Java代码。您可以在github上找到它:https : //github.com/broadbear/sort。该代码旨在替代Java Collections.sort()。如果如上所述,您正在寻找在JVM中执行并行排序的功能,我的存储库中的代码可能会帮助您。该API完全针对实现Comparable或实现自己的Comparator的元素进行了通用。
请问您要对这么多元素进行排序吗?我很想知道我的排序包的潜在应用程序。