Замер времени 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)