2010-04-23 7 views
8

Ich bin diese Frage zu fragen, wie Sie die Verwendung von mehreren Prozessoren von R auf einem Windows XP-Rechner zu optimieren.Multi-Core-Verarbeitung in R auf Windows XP - über DoMC und Foreach

Momentan erstelle ich 4 Skripte (jedes Skript mit z. B. für (i in 1: 100) und (i in 101: 200) usw.), die ich in 4 verschiedenen R-Sitzungen gleichzeitig ausführe. Dies scheint die gesamte verfügbare CPU zu verwenden.

Ich möchte dies jedoch ein bisschen effizienter machen. Eine Lösung könnte sein, das "doMC" - und das "foreach" -Paket zu verwenden, aber dies ist in R auf einer Windows-Maschine nicht möglich.

z.B.

library("foreach") 
library("strucchange") 
library("doMC") # would this be possible on a windows machine? 
registerDoMC(2) # for a computer with two cores (processors) 
## Nile data with one breakpoint: the annual flows drop in 1898 
## because the first Ashwan dam was built 
data("Nile") 
plot(Nile) 

## F statistics indicate one breakpoint 
fs.nile <- Fstats(Nile ~ 1) 
plot(fs.nile) 
breakpoints(fs.nile)  # , hpc = "foreach" --> It would be great to test this. 
lines(breakpoints(fs.nile)) 

Irgendwelche Lösungen oder Ratschläge?

Antwort

4

Der Vollständigkeit halber ist hier die angeforderte Antwort auf Tal Kommentar, der eine einfache und portable Alternative bietet. Die Antwort besteht

> library(snow) 
> help(makeCluster) 

laufen und laufen die ersten drei Zeilen Code aus der Spitze der Beispiele: Abschnitt:

> cl <- makeCluster(c("localhost","localhost"), type = "SOCK") 
> clusterApply(cl, 1:2, get("+"), 3) 
[[1]] 
[1] 4 

[[2]] 
[1] 5 

> stopCluster(cl) 
> .Platform$OS.type 
[1] "windows" 
> 

War das wirklich so schwer?

Add-on-Pakete wie doSNOW und danach foreach Verwendung dieses in einer tragbaren Weise machen.

+0

Hallo Dirk. Zwei Dinge: 1) habe ich versucht, den Code auf meinem Computer und es fror auf „makeCluster“ 2) Ich erinnere mich, zuletzt habe ich versucht, es, dass es nicht mit den beiden Kernen funktionierte ich hatte - aber nur zwei lief R Instanzen auf dem gleichen.Was denken Sie ? Tal –

+0

Was lässt Sie glauben, dass die beiden Instanzen auf demselben Kern laufen? Wenn Sie "cpu pinning" nicht aktivieren (normalerweise eine eher vom Betriebssystem abhängige Funktion), weist das Betriebssystem Jobs nach eigenem Ermessen zu. Zahlreiche Leute, einschließlich des SNOW-Autors, benutzen es so für den erklärten Zweck der "einfachen parallelen Arbeit an Windows". Außerdem können Sockel in größerem Maßstab unzuverlässig sein. Echte Arbeit sollte mit MPI gemacht werden. Zuletzt, wie für die Maschine hängen: keine Ahnung. Ich vermeide dieses Betriebssystem wo ich kann, was fast immer der Fall ist. –

+0

Hallo Dirk, Danke für die Antworten. In Bezug darauf, welcher Kern verwendet wird - ich habe einfach seine Verwendung im Windows Task-Manager überprüft. Aber es ist aus der Erinnerung, und ich könnte falsch liegen. Am besten, Tal –

4

Probieren Sie das parallele Backend doSNOW aus - es wird von Anfang an unter Windows unterstützt. Verwenden Sie es mit einem Snow-Socket-Cluster.

+0

Könnten Sie bitte einen einfachen Beispielcode dafür geben? (Ich erinnere mich daran, es einmal zu versuchen und dass es nicht für mich funktionierte) Danke. –

+0

Bitte sehen Sie die Antwort, die ich gerade gepostet habe. –

3

Sie könnten versuchen, doSMP von REvolution Computing. Weitere Informationen finden Sie in diesem Blog-Beitrag: Parallel Multicore Processing with R (on Windows)

+1

Ich sollte uns bemühen, uns auf CRAN (oder BioC oder ...) Pakete anstatt kommerzielle Erweiterungen zu konzentrieren, da dies uns auf den Weg zu nicht-portablem Code bringt, der nicht-öffentliche Module verwendet. –

+2

Hallo Dirk, im Allgemeinen stimme ich dir zu. Speziell in diesem Fall - doSMP ist GPL und frei (und in dem Post, der damit verlinkt ist, heißt es, dass Sie diese Bibliothek auf Ihre eigene R-Installation portieren können). Prost, Tal –

+1

Kannst du bitte REvo bitten, es auf CRAN hochzuladen, oder tu es selbst, wenn es in der Tat GPL ist, die dir das Recht zur Weiterverteilung gibt? –