【发布时间】: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