我有一些测试代码,我一直在不同的机器上运行,总是得到相同的结果。我认为各种 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)
在所有四种情况下,foreach(i = 1:3,.combine = "c") %dopar% {sqrt(i)}
产生完全相同的结果,所以我知道我已经安装了软件包并且在我测试过的每台机器上都可以正常工作。
doMC 与 doSMP、doSNOW 和 doMPI 有何不同?