Я теряю скорость. Вы должны помнить, что при выполнении параллельных вычислений возникают дополнительные затраты:
2 узла:
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
# user system elapsed
# 1.71 0.26 2.13
system.time(foreach(i=1:10000) %do% sqrt(i))
# user system elapsed
# 1.36 0.00 1.36
stopCluster(cl)
12 узлов:
cl <- makeCluster(12)
registerDoParallel(cl)
system.time(foreach(i=1:10000) %dopar% sqrt(i))
# user system elapsed
# 1.92 0.14 2.09
system.time(foreach(i=1:10000) %do% sqrt(i))
# user system elapsed
# 1.28 0.00 1.28
stopCluster(cl)
Для такой простой функции вы не можете ожидать, что время на go уменьшится на коэффициент, соответствующий количеству узлов.
Сравните с:
heavy_computation <- function(i) {
Sys.sleep(0.1)
1 + i
}
cl <- makeCluster(12)
registerDoParallel(cl)
system.time(foreach(i=1:100) %dopar% heavy_computation(i))
# user system elapsed
# 0.03 0.00 0.95
system.time(foreach(i=1:100) %do% heavy_computation(i))
# user system elapsed
# 0.00 0.00 10.28
stopCluster(cl)