我在Google云端平台上安装了Rstudio服务器和R版本3.5.1的虚拟机。机器类型为n1-highmem-64
,表示它具有64个内核。
我注意到我使用的内核越多,每个内核获得的速度就越慢。例如,当我使用所有核时,拟合平均样本量大的线性回归模型所需的平均时间大约是每个核的两倍,而使用核的时间仅为一半。这怎么可能?在具有8核的本地PC上,我没有相同的问题。无论我使用多少个内核,每个内核的平均时间都是相同的。
这是一个小例子:
library(parallel)
cl <- makeCluster(64)
cores_used <- 2^(0:6)
average_time_per_core <- sapply(cores_used, function(ncore) {
mean(parSapply(cl, 1:ncore, function(i) {
system.time({
set.seed(1)
n = 10^7
y = rnorm(n)
x = y + rnorm(n)
lm(y ~ x)
})[["elapsed"]]
}))
})
plot(cores_used, average_time_per_core)