У меня есть виртуальная машина на облачную платформу 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)