【问题标题】:Is parallel merge sort always worth it?并行归并排序总是值得的吗?
【发布时间】:2014-10-07 13:43:44
【问题描述】:

所以,我知道如果我有 n 个数据和 p 个处理器,则像合并排序这样的算法会将这些数据拆分为每个处理器的 n/p 个数据,并对数据的每个子部分运行顺序排序算法.然后它将它们重新组合在一起(对它们进行排序)。 我想知道的是,这是否总是比简单地在 n 上使用顺序归并排序更快? 我看到,由于我们对 n/p 数据进行操作,时间复杂度在降低,但由于我们有额外的时间用于并行操作,所以时间复杂度也在增加......

我在想,如果我建立这两个方程,它们应该看起来像这样:

N/p log2 N/p + 2N-2 = N* log2 N

其中左侧是并行算法,右侧是非并行算法。这是正确的,我将如何解决它?

【问题讨论】:

  • 这里有一个漂亮的小图,它显示了不同实现的基准:drdobbs.com/parallel/parallel-in-place-merge-sort/240169094
  • 所以我想一定有一个点比另一种更有效,反之亦然 那么,上面的等式是否正确找到一种情况变成另一种情况的点? (而且我不知道如何解决这个问题......尝试了几件事,没有哪个游戏让我觉得有意义:/)
  • “用于并行操作的时间”是什么意思?为什么它与 N 相关但与 p 无关?
  • 用于并行操作的时间是指用于将每个处理器排序的各种 n/p 数据重新合并在一起的时间,我让它依赖于 N,因为当我重新合并在一起时数据由每个处理器排序,完成它所需的时间取决于我正在合并的数据片段的长度。 (我认为..)

标签: sorting parallel-processing mergesort


【解决方案1】:

以 2 个处理器的简单情况为例。为简单起见(因为您没有另外说),我将假设共享内存。

顺序案例将依次:

  1. 排序一半
  2. 排序另一半
  3. 合并两半

并行案例将执行相同的步骤,但并行执行步骤 1 和 2;唯一增加的工作是管理进程/线程的任何开销。

随着处理器数量的增加,执行并行部分所需的时间会减少,从而加快处理速度,直到被管理并行位的开销所取代。

【讨论】:

  • 我理解为什么并行部分应该总是减少,但是将它的时间复杂度与 n 数据的简单合并排序进行比较,什么时候使用并行变得“值得”。是的,n/p 的归并排序使我花费的时间更少,但归并排序后的部分( O(2N-2) )也花费了我更多的时间。
  • 虽然它可能不会出现在 O() 表示法中(因为 O(N) 包含在 O(N log N) 中),但两种算法的合并工作完全相同;并行版本不需要更多时间来合并。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 2015-06-10
  • 1970-01-01
  • 2013-11-08
  • 2015-04-22
相关资源
最近更新 更多