Die Herausforderung für heute: Den Zufallszahlengenerator beschleunigen. Der Plan ist, das Multicore Package dafür zu benutzen…
Technik:
- Apple Macbook Air, Intel Core i5 1,7 GHZ, 2 Kerne, 4 Threads
- 4 GB RAM
Aufgabe:
- Erzeuge 300.000.000 Zufallszahlen.
Alternativen:
- Plain Vanilla „sample“:
> my.sims<-300000000 > system.time(Rnd<-sample(1000,size=my.sims,replace=TRUE)) User System verstrichen 4.852 0.524 5.503
- Zufallszahlen mit „lapply“ als Vorbereitung auf Schritt 3:
> my.sims<-300000000 > system.time(Rnd<-lapply(1000,sample,my.sims,replace=TRUE)) User System verstrichen 5.573 0.831 7.471
- Zufallszahlen mit „mclapply“ aus dem Package multicore:
> require(multicore) > my.cores<-4 > options(cores=my.cores) > my.sims<-300000000/my.cores > x<-list(rep(1000,my.cores)) > system.time(Rnd<-unlist(mclapply(x,sample,my.sims,replace=TRUE))) User System verstrichen 2.506 0.849 4.847
Ergebnis:
Beschleunigung um 11,9%. Warum die Beschleunigung nicht größer ist, ist mir ein Rätsel…
Kleines Update im Nachgang: Ich hatte die Speicherauslastung nicht im Blick, so dass auf die SSD ausgelagert wurde. Bei rein prozessorintensiven Berechnungen klappt es auch mit der Skalierung!