29

さまざまなマシンで実行したいくつかのテスト コードがありますが、常に同じ結果が得られます。さまざまな do... パッケージの背後にある哲学は、foreach の %dopar% のバックエンドとして互換的に使用できるということだと思いました。そうでないのはなぜですか?

たとえば、次のコード スニペットは機能します。

library(plyr)
library(doMC)
registerDoMC()
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE)

これらのコード スニペットはそれぞれ失敗しますが、

library(plyr)
library(doSMP)
workers <- startWorkers(2)
registerDoSMP(workers)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE) 
stopWorkers(workers)

library(plyr)
library(snow)
library(doSNOW)
cl <- makeCluster(2, type = "SOCK")
registerDoSNOW(cl)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE) 
stopCluster(cl)

library(plyr)
library(doMPI)
cl <- startMPIcluster(count = 2)
registerDoMPI(cl)
x <- data.frame(V= c("X", "Y", "X", "Y", "Z" ), Z = 1:5)
ddply(x, .(V), function(df) sum(df$Z),.parallel=TRUE) 
closeCluster(cl)

4 つのケースすべてforeach(i = 1:3,.combine = "c") %dopar% {sqrt(i)}でまったく同じ結果が得られるため、テストした各マシンでパッケージがインストールされ、適切に動作していることがわかります。

doSMP、doSNOW、および doMPI と doMC の違いは何ですか?

4

1 に答える 1

32

doMC現在の R プロセスをフォークして、既存のすべての変数を継承します。他のすべての do バックエンドは、明示的に要求された変数のみを渡します。残念ながら、私はそれを認識していませんdoMCでした.

于 2011-04-11T12:40:18.070 に答える