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
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_gamesla1e5. - Folosește
system.time()pentru a cronometra apelurile repetate ale funcțieiplay()în serie.- Apelează
sapply()cu1:no_of_gamesși funcția wrapperplay(). - Atribuie rezultatul variabilei
serial. - Împachetează acest apel în
system.time()pentru a-l cronometra.
- Apelează
- 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țieiplay()în paralel.- Adaptează codul folosit pentru a crea
serial, astfel încât să funcționeze în paralel.
- Adaptează codul folosit pentru a crea
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)