ПочатиПочніть безкоштовно

Вимірювання часу з 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)
Редагувати та запускати код