2

我在 R 中做多核计算。我是

以下是每个计算的代码和输出。为什么随着核心数量的增加,经过的时间会增加?这真的是违反直觉的。我认为随着核心数量的增加,经过的时间减少是合理的。有没有什么办法解决这一问题?

在此处输入图像描述

这是代码:

library(parallel)
detectCores()
system.time(pvec(1:1e7, sqrt, mc.cores = 1))
system.time(pvec(1:1e7, sqrt, mc.cores = 4))
system.time(pvec(1:1e7, sqrt, mc.cores = 8))

谢谢你。

4

1 回答 1

0

假设你的数据被分成N 个部分。您数据的每一部分都以T秒计算。在单核架构中,您期望所有操作都将在N x T秒内完成。你也希望所有的工作都应该在N核机器上用T次完成。但是,在并行计算中,存在通信延迟,由每个单核消耗(初始化、将数据从主核传递到子核、计算、传递结果和完成)。现在让通信延迟为C秒,为简单起见,它对于所有内核都是恒定的。因此,在N核机器中,计算应在

T + N x C

秒,其中T部分用于计算,NXC部分用于总通信。如果我们将其与单核机器进行比较,则不等式

(N x T) > (T + N x C)

至少对于我们的假设,应该满足以获得计算时间。如果我们简化不等式,我们可以得到

C < (N x T - T) / N

因此,如果恒定的通信时间不小于(N x T - T) / N的比率,我们就无法使该计算并行化。

在您的示例中,创建、计算和通信所需的时间大于函数sqrt的单核计算。

于 2016-04-08T09:17:56.990 回答