it-swarm.com.de

Wie kann R alle Prozessoren verwenden?

Ich habe einen Quad-Core-Laptop mit Windows XP, aber der Task-Manager R scheint immer nur einen Prozessor zu verwenden. Wie kann ich R alle vier Prozessoren verwenden und meine R-Programme beschleunigen?

30
David Smith

Ich verwende ein Basissystem, bei dem ich meine Programme auf den "for" -Schleifen parallelisiere. Diese Methode ist einfach, wenn Sie verstanden haben, was zu tun ist. Es funktioniert nur für lokales Computing, aber das scheint es zu sein, was Sie suchen.

Sie müssen diese Bibliotheken installiert haben:

library("parallel")
library("foreach")
library("doParallel")

Zuerst müssen Sie Ihren Computing-Cluster erstellen. Normalerweise mache ich andere Sachen, während ich parallele Programme laufe, also lasse ich eines gerne offen. Die Funktion "detectCores" gibt die Anzahl der Kerne in Ihrem Computer zurück.

cl <- makeCluster(detectCores() - 1)
registerDoParallel(cl, cores = detectCores() - 1)

Rufen Sie als Nächstes Ihre for-Schleife mit dem Befehl "foreach" und dem Operator% dopar% auf. Ich verwende immer einen Wrapper "try", um sicherzustellen, dass alle Iterationen, bei denen die Operationen fehlschlagen, verworfen werden und die ansonsten guten Daten nicht unterbrochen werden. Sie müssen den Parameter ".combine" angeben und die erforderlichen Pakete in die Schleife geben. Beachten Sie, dass "i" mit einem Gleichheitszeichen definiert ist, nicht mit einem "in" -Operator!

data = foreach(i = 1:length(filenames), .packages = c("ncdf","chron","stats"),
               .combine = rbind) %dopar% {
  try({
       # your operations; line 1...
       # your operations; line 2...
       # your output
     })
}

Wenn Sie fertig sind, machen Sie mit:

stopCluster(cl)
42
hangmanwa7id

In der Taskansicht CRAN zum Hochleistungsrechnen mit R werden mehrere Optionen aufgeführt. XP ist eine Einschränkung, aber Sie haben immer noch etwas wie snow , um innerhalb weniger Minuten mit Sockets zu arbeiten.

29

Ab Version 2.15 bietet R jetzt native Unterstützung für Multi-Core-Berechnungen. Laden Sie einfach das Parallelpaket

library("parallel")

und check die dazugehörige Vignette aus

vignette("parallel")
15
csgillespie

Ich höre sagen, dass REvolution R besseres Multithreading unterstützt, als die typische CRAN-Version von R und REvolution auch 64-Bit-R in Windows unterstützt. Ich habe darüber nachgedacht, eine Kopie zu kaufen, aber ihre Preisgestaltung war undurchsichtig. Es gibt keine Preisliste auf ihrer Website. Sehr komisch. 

7
JD Long

Ich glaube, dass das Paket multicore unter XP funktioniert. Es bietet einige grundlegende Multiprozessfunktionen, insbesondere durch die Bereitstellung eines Drop-In-Ersatzes für lapply() und einer einfachen Möglichkeit, einen Ausdruck in einem neuen Thread (mcparallel()) zu bewerten.

6
Peter M

Unter Windows glaube ich, dass der beste Weg, dies zu tun, wahrscheinlich mit Foreach und Schnee sein wird, wie David Smith sagte.

Unix/Linux-basierte Systeme können jedoch mit mehreren Prozessen mit dem 'Multicore'-Paket rechnen. Es bietet eine übergeordnete Funktion, "mclapply", die ein Listenverständnis über mehrere Kerne hinweg ausführt. Ein Vorteil des "Multicore" -Pakets besteht darin, dass jeder Prozessor eine private Kopie der globalen Umgebung erhält, die er möglicherweise ändert. Anfänglich ist diese Kopie nur ein Zeiger auf die globale Umgebung. Dadurch wird das Teilen von Variablen extrem schnell, wenn die globale Umgebung als schreibgeschützt behandelt wird.

Rmpi erfordert, dass die Daten explizit zwischen R-Prozessen übertragen werden, anstatt mit dem "Multicore" -Ansatz zu arbeiten.

- Dan

2
ephpostfacto

Wenn Sie viele Matrixoperationen ausführen und Windows verwenden, können Sie revolutionanalytics.com/revolution-r-open kostenlos installieren. Im Lieferumfang sind die MKL-Bibliotheken von Intel enthalten, mit denen Sie Multithread-Matrixoperationen ausführen können. Wenn Sie unter Windows die Dateien libiomp5md.dll, Rblas.dll und Rlapack.dll von dieser Installation nehmen und die Dateien in der von Ihnen verwendeten R-Version überschreiben, haben Sie Multithread-Matrixoperationen (in der Regel eine Geschwindigkeit von 10 bis 20 x für Matrixoperationen). Oder Sie können die Atlas Rblas.dll von prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/binary/windows/x64 verwenden, die ebenfalls mit 64 Bit R arbeiten und fast so schnell sind wie die MKL-Dateien. Ich habe festgestellt, dass dies die einfachste Möglichkeit ist, die Leistung von R auf Windows-Systemen drastisch zu steigern. Nicht sicher, warum sie bei R Windows-Installationen nicht standardmäßig zur Verfügung stehen. 

Unter Windows wird Multithreading in R leider nicht gut unterstützt (es sei denn, Sie verwenden OpenMP über Rcpp ) und die verfügbare SOCKET-basierte Parallelisierung auf Windows-Systemen, z. über Paket parallel ist sehr ineffizient. Auf POSIX-Systemen ist es besser, da Sie dort mit Gabelungen arbeiten können. (Paket multicore gibt es meiner Meinung nach das effizienteste). Sie könnten auch versuchen, das Paket Rdsm für Multithreading innerhalb eines Shared Memory-Modells zu verwenden. Ich habe eine Version auf meinem Github, die das Flag "-unix only" ohne Flags hat und auch unter Windows funktionieren sollte (früher wurde Windows nicht als abhängige bigmemory-Komponente unterstützt) funktioniert nicht unter Windows, aber jetzt scheint es):

library(devtools)
devtools::install_github('tomwenseleers/Rdsm')
library(Rdsm)
0
Tom Wenseleers