![]() |
2
6
我已经使用了并行快速排序算法和PSRS算法,它们基本上是将快速排序与合并结合在一起的。 使用并行快速排序算法,我演示了近线性加速,最多4个核心(双核心,超线程),考虑到算法的局限性,这是预期的。纯并行快速排序依赖于共享的堆栈资源,这将导致线程之间的争用,从而降低性能的任何增益。这种算法的优点是它可以“就地”排序,从而减少了所需的内存量。在按照您的说明对100米以上的元素进行排序时,您可能需要考虑这一点。 我看到你正在寻找一个8-32核的系统。PSRS算法避免了在共享资源上的争用,允许在更多进程上加速。我已经演示了上面提到的最多4个核心的算法,但是其他人的实验结果显示,核心数量更大,超过32个,几乎是线性加速。PSRS算法的缺点是它没有就位,需要相当多的内存。 如果您感兴趣,您可以使用或使用这些算法中的每一个Java代码。你可以在Github上找到它: https://github.com/broadbear/sort . 代码的目的是作为Java集合的替代。如果您正在寻找在上面所述的JVM中执行并行排序的能力,那么我的repo中的代码可能会帮助您解决问题。对于实现可比较或实现自己的比较器的元素,API是完全通用的。 我可以问一下你要为这些元素排序的目的是什么吗?我有兴趣了解我的分类包的潜在应用程序。 |
![]() |
3
4
看看这篇论文: A Scalable Parallel Sorting Algorithm Using Exact Splitting . 它涉及32多个核心。然而,它详细描述了一种运行时间复杂度为o(n/p*log(n)+p*log(n)**2)的算法,适用于任意比较器。 |
![]() |
4
2
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |