我在桌面上使用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个新创建的进程名为&#34; Rscript.exe&#34;,但只有一个在跑。
我正在使用我的办公桌面。我记得第一次使用&#34; doSNOW&#34;在我自己的笔记本电脑上,Windows弹出一个小的对话栏,要求获得某种许可,但我的办公桌面从未问过我。我不知道我的情况是否与某些系统块有关,只需注意这里。
非常感谢谁可以帮助我。
此致 查理
答案 0 :(得分:4)
问题是任务太小。似乎正在运行的一个过程可能是所有30,000个结果的主人。
如果你有许多微小的任务,你应该将它们组合成更少,更大的任务,这称为 chunking 。以下是为您的示例执行此操作的一种方法:
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这样的东西更快地解决这个特定问题,但这项技术非常重要,至少看起来只有一个进程正在进行任何工作。