Вимірювання часу з parSapply()
Запуск гри в кості є надзвичайно паралельним завданням. Такі моделювання зазвичай (але не завжди) дають помітне прискорення. Як і раніше, можна скористатися microbenchmark() або system.time(). Для простоти в цій вправі ми використаємо system.time().
Ця вправа є частиною курсу
Ефективне програмування R
Інструкції до вправи
Функцію play() визначено у вашому робочому середовищі. Припустімо, що потрібно зіграти сто тисяч партій.
- Задайте
no_of_gamesяк1e5. - Використайте
system.time(), щоб виміряти час послідовних викликівplay().- Викличте
sapply()з1:no_of_gamesі обгорткою-функцієюplay(). - Присвойте результат до
serial. - Обгорніть цей виклик у
system.time(), щоб виміряти час.
- Викличте
- Створіть кластер з 4 ядер і експортуйте до нього функцію
play(). - Використайте
system.time(), щоб виміряти час паралельних викликівplay().- Переробіть код, який ви використали для створення
serial, але змусьте його працювати паралельно.
- Переробіть код, який ви використали для створення
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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)