ÎncepețiÎncepe gratuit

Timings parSapply()

Rularea jocului de zaruri este embarrassingly parallel. Acest tip de simulări produce, de obicei (dar nu întotdeauna), o accelerare semnificativă. Ca și înainte, putem folosi microbenchmark() sau system.time(). Pentru simplitate, vom folosi system.time() în acest exercițiu.

Acest exercițiu face parte din cursul

Scrierea codului R eficient

Vezi cursul

Instrucțiuni pentru exercițiu

Funcția play() a fost definită în spațiul tău de lucru. Vom presupune că vrem să jucăm o sută de mii de jocuri.

  • Setează no_of_games la 1e5.
  • Folosește system.time() pentru a cronometra apelurile repetate ale funcției play() în serie.
    • Apelează sapply() cu 1:no_of_games și funcția wrapper play().
    • Atribuie rezultatul variabilei serial.
    • Împachetează acest apel în system.time() pentru a-l cronometra.
  • Creează un obiect cluster cu 4 nuclee și exportă funcția play() către acesta.
  • Folosește system.time() pentru a cronometra apelurile repetate ale funcției play() în paralel.
    • Adaptează codul folosit pentru a crea serial, astfel încât să funcționeze în paralel.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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)
Editează și rulează codul