Tengo algunas piezas de prueba de código que he estado ejecutando en varias máquinas, siempre con los mismos resultados. Pensé que la filosofía detrás de los diversos paquetes do ... era que podían usarse indistintamente como un backend para el%% dopar de foreach. ¿Por qué no es este el caso?doMC vs doSNOW vs doSMP vs doMPI: ¿por qué los diversos backends paralelos para 'foreach' no son funcionalmente equivalentes?
Por ejemplo, este fragmento de código funciona:
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)
Si bien cada uno de estos fragmentos de código fallan:
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)
En los cuatro casos, foreach(i = 1:3,.combine = "c") %dopar% {sqrt(i)}
produce exactamente el mismo resultado, por lo que sé que tener los paquetes instalados y funcionando correctamente en cada máquina en la que los he probado.
¿Qué hace doMC de manera diferente a doSMP, doSNOW y doMPI?
¿Deseas actualizar esta respuesta todavía? –