Почему параллельный foreach странно медленен с решить? - PullRequest
0 голосов
/ 01 июня 2018

Я пытался повысить эффективность своего кода, используя параллельный цикл foreach из библиотеки doParralel.Однако я обнаружил, что для завершения параллельного кода требуется значительно больше времени.Мне удалось сузить проблему до линий, оптимизирующих (nloptr) функцию, включающую инверсию матрицы.Может ли кто-нибудь помочь мне выяснить, почему я получаю следующие результаты?Это точный сценарий, который я использую для воспроизведения проблемы

library(doParallel)
if (!exists('cluster')) {
  cl <<- makeCluster(2)
  registerDoParallel(cl)
  }

pt <- function(n,t,m,par=TRUE) {
  if (par)
    foreach(1:t) %dopar% {
      for(i in 1:m)
        solve(matrix(runif(n*n),n,n))
      NULL
    }
  else
    foreach(1:t) %do% {
      for(i in 1:m)
        solve(matrix(runif(n*n),n,n))
      NULL
    }
}

Затем,

> system.time(pt(200,6,10,FALSE))
 user  system elapsed 
0.904   1.667   0.330 
> system.time(pt(200,6,10,TRUE))
 user  system elapsed 
0.133   0.012  33.918 

Меньшее время пользователя - отлично.Но почему невероятно высокое общее прошедшее время?

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.4 LTS

locale:
 [1] LC_CTYPE=en_GB.UTF-8          LC_NUMERIC=C                 
 [3] LC_TIME=pl_PL.UTF-8           LC_COLLATE=en_GB.UTF-8       
 [5] LC_MONETARY=pl_PL.UTF-8       LC_MESSAGES=en_GB.UTF-8      
 [7] LC_PAPER=pl_PL.UTF-8          LC_NAME=pl_PL.UTF-8          
 [9] LC_ADDRESS=pl_PL.UTF-8        LC_TELEPHONE=pl_PL.UTF-8     
[11] LC_MEASUREMENT=pl_PL.UTF-8    LC_IDENTIFICATION=pl_PL.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
[1] doParallel_1.0.11 iterators_1.0.9   foreach_1.4.4     rkward_0.6.3     

loaded via a namespace (and not attached):
[1] tools_3.2.3      codetools_0.2-14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...