2015-03-11 6 views
40

Was ist der Unterschied zwischen doParallel und doMC in R bezüglich foreach Funktion? doParallel unterstützt Windows, unix-like, während doMC unterstützt nur unix-like. Mit anderen Worten, warum kann doParalleldoMC nicht direkt ersetzen? Vielen Dank.der Unterschied zwischen DoMC und DoParallel in R

Update: doParallel auf parallel gebaut ist, die im Wesentlichen eine Fusion von multicore und snow und verwendet automatisch das entsprechende Werkzeug für Ihr System. Als Ergebnis können wir doParallel verwenden, um Multi-Systeme zu unterstützen. Mit anderen Worten, wir können doParallel verwenden, um doMC zu ersetzen.

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

BTW, was ist der Unterschied zwischen registerDoParallel(ncores=3) und

cl <- makeCluster(3) 
registerDoParallel(cl) 

Es registerDoParallel(ncores=3) scheint automatisch Cluster stoppen kann, während der zweite Anschlag nicht automatisch und muss stopCluster(cl).

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

+0

nur so, dass die beiden http://stackoverflow.com/questions/28829300/doparallel-cluster-vs-cores?noredirect=1&lq=1 – Tony

+0

Mögliche Duplikat [doParallel, Cluster vs Kerne] verlinkt wird (https://Paketüberfluss.com/questions/28829300/doparallel-cluster-vs-cores) –

Antwort

23

Das doParallel Paket ist ein Zusammenschluss von doSNOW und doMC, so sehr parallel ist ein Zusammenschluss von snow und multicore. Aber obwohl doParallel alle Funktionen von doMC hat, wurde ich von Rich Calaway von Revolution Analytics gesagt, dass sie doMC um halten wollte, weil es effizienter, unter bestimmten Umständen war, obwohl doMC verwendet nun parallel wie doParallel. Ich habe persönlich keine Benchmarks durchgeführt, um festzustellen, ob und wann ein signifikanter Unterschied besteht.

neige ich doMC auf einem Linux oder Mac OS X-Computer zu verwenden, doParallel auf einem Windows-Computer und doMPI auf einem Linux-Cluster, aber doParallel funktioniert auf allen diesen Plattformen.


Wie für die verschiedenen Registrierungsverfahren, wenn Sie ausführen:

registerDoParallel(cores=3) 

auf einem Windows-Rechner, wird es ein Cluster-Objekt implizit für die spätere Verwendung mit clusterApplyLB, während auf Linux und Mac OS X erstellen , kein Cluster-Objekt wird erstellt oder verwendet. Die Anzahl der Kerne wird einfach gespeichert und später als Wert des Arguments mc.cores verwendet, wenn mclapply aufgerufen wird.

Wenn Sie ausführen:

cl <- makeCluster(3) 
registerDoParallel(cl) 

dann die registrierten Cluster-Objekt wird mit clusterApplyLB unabhängig von der Plattform verwendet werden. In diesem Fall liegt es in Ihrer Verantwortung, das Clusterobjekt seit der Erstellung zu schließen, während das implizite Clusterobjekt automatisch heruntergefahren wird.

+1

Gibt es Wörter oder Dokumente über "die bestimmten Umstände" für "DoMC" von Rich Calaway von Revolution Analytics? Gibt es darüber hinaus einen Unterschied in Bezug auf die Leistung in der "ncores" und "makeCluster" -Situation? Ich entwickelte ein R [cogena] (https://github.com/zhilongjia/cogena) -Paket, wo parallel mit 'doMC' ursprünglich kopiert wurde. Ich habe es vor einigen Stunden in "doParallel" geändert, um Windows zu unterstützen. Es ist ein Wurfkomplex, der 'NAMESPACE' und' import' betrifft, wenn er durch die Mischung von 'doMC' und' doParallel' implementiert wird. Vielen Dank. –

+0

@Zhilong In einem R-Paket sollten Sie den Endbenutzer registrieren lassen, welches Backend am besten auf seiner Hardware funktioniert. Das macht Ihren Code einfacher und flexibler. Das war die ursprüngliche Absicht, das Backend zu trennen und es ist zum Beispiel die Art, wie Caret und Plyr es tun. –

+0

Ich habe deine Idee bekommen. Vielen Dank. Wenn es im allgemeinen Gerät Leistungsunterschiede gibt, werde ich tun, was Sie vorgeschlagen haben. Wenn nicht, bevorzuge ich mein Paket ist bisher einfach zu bedienen. Ich habe den Maintainer von 'doParallel' gemailt und werde euch auf dem Laufenden halten. –

Verwandte Themen