низкая производительность работников в пакете foreach R - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю с пакетами foreach и doParallel в Windows, но процессор, используемый в коде, составляет менее 10% во время функции foreach.Это код, который я использую с небольшим примером.

library(doParallel)
library(foreach)
library(dplyr)
library(Matrix)
cl <- detectCores() - 1  
registerDoParallel(cl)
n_max=1300000
df=data.frame(fromID=sample(c(1:1300000),2000,replace=TRUE),
              toID=sample(c(1:1300000),2000,replace=TRUE),
              group=sample(c(1:10),2000,replace=TRUE))
As=foreach (i=1:10,.packages=c('dplyr','Matrix'))%dopar%{
  databygroup=filter(df,group==i)
        sparseMatrix(i=databygroup$fromID,j=databygroup$toID,x=1,dims=c(n_max,n_max))
}  

stopImplicitCluster()

Перед использованием foreach у меня есть этот результат, чтобы узнать, сколько рабочих активно.

> cat(sprintf('%s backend is registered\n',
+             if(getDoParRegistered()) 'A' else 'No'))
A backend is registered
> cat(sprintf('Running with %d worker(s)\n', getDoParWorkers()))
Running with 35 worker(s)
> (name <- getDoParName())
[1] "doParallelSNOW"
> (ver <- getDoParVersion())
[1] "1.0.11"
> if (getDoParRegistered())
+   cat(sprintf('Currently using %s [%s]\n', name, ver))
Currently using doParallelSNOW [1.0.11]

Я получил сообщение для нескольких соединений

"Если if (.Internal (существует (package, .Internal (getNamespaceRegistry ())), ...: закрытие неиспользуемого соединения 70 ..."

И после использования функции stopImplicitCluster количество рабочихЯ не могу закрыть рабочих.

stopCluster (cl) не работает

> cat(sprintf('Running with %d worker(s)\n', getDoParWorkers()))
Running with 2 worker(s)
> (name <- getDoParName())
[1] "doParallelSNOW"
> (ver <- getDoParVersion())
[1] "1.0.11"
> if (getDoParRegistered())
+ cat(sprintf('Currently using %s [%s]\n', name, ver))
Currently using doParallelSNOW [1.0.11]
> stopCluster(cl)
> cat(sprintf('Running with %d worker(s)\n', getDoParWorkers()))
Running with 2 worker(s)
> stopCluster(cl)
Error in summary.connection(connection) : invalid connection

Я не знаю, почему не работает распараллеливание.

Спасибо за ваше время

1 Ответ

0 голосов
/ 26 сентября 2018

Код правильный, но проблема в том, что компьютер занимает много времени среди задач.Вот почему используемый процессор так низок.

...