У меня есть виртуальная машина на облачной платформе Google с установленным сервером Rstudio и версией R 3.5.1. Тип машины - n1-highmem-64
, что означает, что он имеет 64 ядра.
Я заметил, что чем больше ядер я использую, тем медленнее становится каждое ядро. Например, для подгонки модели линейной регрессии с большим размером выборки в среднем требуется примерно вдвое больше времени на ядро, когда я использую все ядра, по сравнению с только половиной ядер. Как это возможно? На моем локальном ПК с 8 ядрами у меня нет такой же проблемы. Среднее время на ядро одинаково, независимо от того, сколько ядер я использую.
Вот небольшой пример:
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)
![enter image description here](https://i.stack.imgur.com/HQuA4.png)