Zeitmessungen mit parSapply()
Das Würfelspiel ist peinlich parallel. Diese Art von Simulationen liefert
meist (aber nicht immer) eine deutliche Beschleunigung. Wie zuvor können wir microbenchmark()
oder system.time() verwenden. Der Einfachheit halber nutzen wir in dieser Übung system.time().
Diese Übung ist Teil des Kurses
<Kurs>Effizient R-Code schreiben</Kurs>Übungsanweisungen
Die Funktion play() wurde in deinem Workspace definiert. Wir nehmen an, dass wir hunderttausend Spiele spielen wollen.
- Setze
no_of_gamesauf1e5. - Verwende
system.time(), um zu messen, wieplay()seriell wiederholt aufgerufen wird.- Rufe
sapply()mit1:no_of_gamesund der Wrapper-Funktionplay()auf. - Weise das Ergebnis
serialzu. - Um diese Messung durchzuführen, umschließe den Aufruf mit
system.time().
- Rufe
- Erzeuge ein Cluster-Objekt mit 4 Kernen und exportiere die Funktion
play()dorthin. - Verwende
system.time(), um zu messen, wieplay()parallel wiederholt aufgerufen wird.- Überarbeite den Code, den du für
serialverwendet hast, sodass er parallel läuft.
- Überarbeite den Code, den du für
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# Set the number of games to play
no_of_games <- ___
# Time serial version
system.time(serial <- sapply(1:___, function(i) play()))
# Set up cluster
cl <- makeCluster(___)
clusterExport(cl, "play")
# Time parallel version
system.time(par <- ___)
# Stop cluster
stopCluster(cl)