为什么经过的时间会随着核心数量的增加而增加?

时间:2016-04-08 05:32:16

标签: r parallels elapsedtime

我在R中进行多核计算。我是

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

enter image description here

以下是代码:

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))

谢谢。

1 个答案:

答案 0 :(得分:0)

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

中完成

T + N x C

T 部分用于计算, N X C 部分用于总通信。如果我们将它与单核机器进行比较,那么不等式

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

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

C< (N x T - T)/ N

所以,如果恒定通信时间不小于(N x T - T)/ N ,我们没有增益使这个计算并行。

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