Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

Funkcja play() jest już zdefiniowana w twoim środowisku. Przyjmijmy, że chcemy rozegrać sto tysięcy gier.

  • Ustaw no_of_games na 1e5.
  • Użyj system.time(), aby zmierzyć czas wielokrotnego wywoływania play() szeregowo.
    • Wywołaj sapply() z argumentami 1:no_of_games oraz funkcją opakowującą play().
    • Przypisz wynik do zmiennej serial.
    • Opakuj to wywołanie w system.time(), aby zmierzyć czas wykonania.
  • Utwórz obiekt klastra z 4 rdzeniami i wyeksportuj do niego funkcję play().
  • Użyj system.time(), aby zmierzyć czas wielokrotnego wywoływania play() równolegle.
    • Przerób kod użyty do stworzenia serial tak, aby działał równolegle.

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)
Edytuj i uruchom kod