繁体   English   中英

通过doSNOW包进行R并行计算,注册了进程但不占用CPU内核

[英]R parallel computing by doSNOW package, processes registered but not consuming CPU cores

我在桌面上使用doSNOW软件包。

cl <- makeCluster(6, type="SOCK")
registerDoSNOW(cl)
m <- matrix(rnorm(90000), 30000, 3)
foreach(i=1:nrow(m), .combine=rbind) %dopar% (m[i,] / mean(m[i,]))
stopCluster(cl)

当上面的程序运行时,我打开了窗口任务管理器,在“进程”选项卡中,我看到有5到6个新创建的名为“ Rscript.exe”的进程,但是其中只有一个正在运行。

我正在使用我的办公室桌面。 我记得我第一次在自己的笔记本电脑上使用“ doSNOW”时,Windows弹出一个小对话框,要求某种许可,但我的办公室台式机从未问过。 我不知道我的情况是否与某些系统块有关,这里只是一个注释。

在此先感谢可以帮助我的人。

真诚的查理

问题是任务太小。 似乎正在运行的一个过程可能是将所有30,000个结果结合在一起的母版。

如果您有许多微小的任务,则应将它们组合成更少,更大的任务,这称为分块 这是为您的示例执行此操作的一种方法:

library(doSNOW)
library(itertools)
cl <- makeCluster(6, type="SOCK")
registerDoSNOW(cl)
m <- matrix(rnorm(90000), 30000, 3)

foreach(s=isplitRows(m, chunks=getDoParWorkers()), .combine='rbind') %dopar% {
  t(apply(s, 1, function(x) x / mean(x)))
}

在我的MacBook Pro上,其运行速度比您的版本快70倍。 您可能可以使用Rcpp之类的东西来更快地解决此特定问题,但是该技术非常重要,至少不会出现只有一个进程在做任何工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM