Pomiar czasu parSapply()
Symulacja gry w kości jest embarrassingly parallel (idealnie równoległa). Tego rodzaju symulacje zazwyczaj – choć nie zawsze – dają wyraźny wzrost wydajności. Podobnie jak wcześniej, możemy skorzystać z microbenchmark() lub system.time(). Dla uproszczenia w tym ćwiczeniu użyjemy system.time().
To ćwiczenie jest częścią kursu
Wydajny kod w R
Instrukcje do ćwiczenia
Funkcja play() jest już zdefiniowana w twoim środowisku. Przyjmijmy, że chcemy rozegrać sto tysięcy gier.
- Ustaw
no_of_gamesna1e5. - Użyj
system.time(), aby zmierzyć czas wielokrotnego wywoływaniaplay()szeregowo.- Wywołaj
sapply()z argumentami1:no_of_gamesoraz funkcją opakowującąplay(). - Przypisz wynik do zmiennej
serial. - Opakuj to wywołanie w
system.time(), aby zmierzyć czas wykonania.
- Wywołaj
- Utwórz obiekt klastra z 4 rdzeniami i wyeksportuj do niego funkcję
play(). - Użyj
system.time(), aby zmierzyć czas wielokrotnego wywoływaniaplay()równolegle.- Przerób kod użyty do stworzenia
serialtak, aby działał równolegle.
- Przerób kod użyty do stworzenia
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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)