r parallel-processing domc doparallel

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.