la diferencia entre doMC y doParallel en R
doparallel r (1)
¿Cuál es la diferencia entre doParallel
y doMC
en R con respecto a la función foreach
? doParallel
admite Windows, como unix, mientras que doMC
compatible con Unix. En otras palabras, ¿ doParallel
qué doParallel
no puede reemplazar doMC
directamente? Gracias.
Actualización: doParallel
está construido en parallel
, que es esencialmente una fusión de multicore
y snow
y utiliza automáticamente la herramienta adecuada para su sistema. Como resultado, podemos usar doParallel
para admitir sistemas múltiples. En otras palabras, podemos usar doParallel
para reemplazar doMC
.
ref: http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf
Por cierto, ¿cuál es la diferencia entre registerDoParallel(ncores=3)
y
cl <- makeCluster(3)
registerDoParallel(cl)
Parece que registerDoParallel(ncores=3)
puede detener el clúster automáticamente, mientras que el segundo no se detiene automáticamente y necesita stopCluster(cl)
.
ref: http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf
El paquete doParallel
es una fusión de doSNOW
y doMC
, tanto como el parallel
es una fusión de snow
y multicore
. Pero aunque doParallel
tiene todas las características de doMC
, Rich Calaway de Revolution Analytics me dijo que querían mantener doMC
porque era más eficiente en ciertas circunstancias, aunque ahora doMC
usa parallel
como doParallel
. Personalmente no he ejecutado ningún punto de referencia para determinar si existe una diferencia significativa y cuándo.
doMC
a usar doMC
en una computadora Linux o Mac OS X, doParallel
en una computadora con Windows y doMPI
en una agrupación Linux, pero doParallel
funciona en todas esas plataformas.
En cuanto a los diferentes métodos de registro, si ejecuta:
registerDoParallel(cores=3)
en una máquina con Windows, creará un objeto de clúster implícitamente para su uso posterior con clusterApplyLB
, mientras que en Linux y Mac OS X, no se creará ni utilizará ningún objeto de clúster. La cantidad de núcleos simplemente se recuerda y se usa como el valor del argumento mc.cores
más adelante cuando se llama a mclapply
.
Si ejecutas:
cl <- makeCluster(3)
registerDoParallel(cl)
entonces el objeto de clúster registrado se usará con clusterApplyLB
independientemente de la plataforma. Tiene razón en que, en este caso, es su responsabilidad cerrar el objeto del clúster desde que lo creó, mientras que el objeto del clúster implícito se cierra automáticamente.