Попытка начать работу с doParallel и foreach, но без улучшения
Я пытаюсь использовать пакет doParallel и foreach, но я получаю снижение производительности, используя пример начальной загрузки в руководстве, найденном здесьCRANpage.
library(doParallel)
library(foreach)
registerDoParallel(3)
x <- iris[which(iris[,5] != "setosa"), c(1,5)]
trials <- 10000
ptime <- system.time({
r <- foreach(icount(trials), .combine=cbind) %dopar% {
ind <- sample(100, 100, replace=TRUE)
result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
coefficients(result1)
}
})[3]
ptime
Этот пример возвращает56.87
.
Когда я меняюdopar
чтобы простоdo
чтобы запустить его последовательно, а не параллельно, он возвращает36.65
.
Если я сделаюregisterDoParallel(6)
параллельное время42.11
но все еще медленнее, чем последовательно.registerDoParallel(8)
получает40.31
все еще хуже чем последовательный.
Если я увеличуtrials
до 100 000, то последовательный прогон занимает417.16
и параллельный прогон с 3 рабочими занимает597.31
, С 6 работниками параллельно требуется425.85
.
Моя система
Dell Optiplex 990
Windows 7 Профессиональная 64-битная
16 ГБ ОЗУ
Четырехъядерный процессор Intel i-7-2600 с тактовой частотой 3,6 ГГц
Я что-то здесь не так делаю? Если я сделаю самую надуманную вещь, о которой только могу подумать (замена вычислительного кода наSys.sleep(1)
) тогда я получу фактическое сокращение, прямо пропорциональное количеству работников. Мне остается удивляться, почему пример в руководстве снижает производительность для меня, в то время как для них это ускоряет процесс?