2015-03-11 12 views
40

Qual è la differenza tra doParallel e doMC in R riguardo alla funzione foreach? doParallel supporta Windows, unix-like, mentre doMC supporta solo unix-like. In altre parole, perché doParallel non può sostituire direttamente doMC? Grazie.la differenza tra doMC e doParallel in R

Aggiornamento: doParallel è costruita su parallel, che è essenzialmente una fusione di multicore e snow e automaticamente utilizza lo strumento appropriato per il sistema. Di conseguenza, possiamo utilizzare doParallel per supportare più sistemi. In altre parole, possiamo usare doParallel per sostituire doMC.

ref: http://michaeljkoontz.weebly.com/uploads/1/9/9/4/19940979/parallel.pdf

BTW, qual è la differenza tra il registerDoParallel(ncores=3) e

cl <- makeCluster(3) 
registerDoParallel(cl) 

Sembra registerDoParallel(ncores=3) può fermare automaticamente cluster, mentre il secondo non si fermano automaticamente e ha bisogno di stopCluster(cl).

ref: http://cran.r-project.org/web/packages/doParallel/vignettes/gettingstartedParallel.pdf

+0

solo in modo che i due vengano collegati http://stackoverflow.com/questions/28829300/doparallel-cluster-vs-cores?noredirect=1&lq=1 – Tony

+0

Possibile duplicato di [doParallel, cluster vs core] (https:// StackOverflow.it/questions/28829300/doparallel-cluster-vs-core) –

risposta

23

Il pacchetto doParallel è una fusione di doSNOW e doMC, quanto parallel è una fusione di snow e multicore. Ma nonostante doParallel, mi è stato detto da Rich Calaway di Revolution Analytics che volevano mantenere doMC in giro perché era più efficiente in alcune circostanze, anche se doMC ora utilizza parallel proprio come doParallel. Non ho personalmente eseguito alcun benchmark per determinare se e quando c'è una differenza significativa.

Io tendo ad usare doMC su un computer Linux o Mac OS X, doParallel su un computer Windows, e doMPI su un cluster Linux, ma doParallel funziona su tutte queste piattaforme.


Per quanto riguarda i diversi metodi di registrazione, se si esegue:

registerDoParallel(cores=3) 

su una macchina Windows, si creerà un oggetto di cluster implicitamente per un uso successivo con clusterApplyLB, mentre su Linux e Mac OS X , nessun oggetto cluster viene creato o utilizzato. Il numero di core viene semplicemente ricordato e utilizzato come valore dell'argomento mc.cores in seguito quando si chiama mclapply.

Se si esegue:

cl <- makeCluster(3) 
registerDoParallel(cl) 

allora l'oggetto di cluster registrati saranno utilizzati con clusterApplyLB indipendentemente dalla piattaforma. È corretto che in questo caso, è responsabilità dell'utente arrestare l'oggetto cluster da quando è stato creato, mentre l'oggetto cluster implicito viene automaticamente arrestato.

+1

Ci sono parole o documenti relativi a "determinate circostanze" per 'doMC' da Rich Calaway di Revolution Analytics? Inoltre, c'è qualche differenza considerando le prestazioni nella situazione di 'ncores' e' makeCluster'? Ho sviluppato un pacchetto R [cogena] (https://github.com/zhilongjia/cogena) in cui il parallelo è stato copiato con 'doMC' in origine. L'ho appena modificato in 'doParallel' per supportare Windows poche ore fa. Si tratta di un complesso di rifiuti relativo a 'NAMESPACE' e' import' quando implementato tramite mix di 'doMC' e' doParallel'. Grazie. –

+0

@Zhilong In un pacchetto R, penso che dovresti consentire all'utente finale di registrare qualsiasi back-end che funzioni meglio sul loro hardware. Ciò rende il tuo codice più semplice e flessibile. Questo è stato l'intento originale di separare il back-end ed è il modo in cui l'ometto e il plyr lo fanno, per esempio. –

+0

Ho avuto la tua idea. Grazie. Se ci sono differenze di prestazioni nella macchina generale, farò come suggerito. In caso contrario, preferisco che il mio pacchetto sia facile da usare finora. Ho inviato un'email al Maintainer di 'doParallel' e ti terremo aggiornato. –