簡體   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