LoslegenKostenlos starten

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>
Kurs ansehen

Übungsanweisungen

Die Funktion play() wurde in deinem Workspace definiert. Wir nehmen an, dass wir hunderttausend Spiele spielen wollen.

  • Setze no_of_games auf 1e5.
  • Verwende system.time(), um zu messen, wie play() seriell wiederholt aufgerufen wird.
    • Rufe sapply() mit 1:no_of_games und der Wrapper-Funktion play() auf.
    • Weise das Ergebnis serial zu.
    • Um diese Messung durchzuführen, umschließe den Aufruf mit system.time().
  • Erzeuge ein Cluster-Objekt mit 4 Kernen und exportiere die Funktion play() dorthin.
  • Verwende system.time(), um zu messen, wie play() parallel wiederholt aufgerufen wird.
    • Überarbeite den Code, den du für serial verwendet hast, sodass er parallel läuft.

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)
Code bearbeiten und ausführen