НачатьНачать бесплатно

Замер времени 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)
Редактировать и запускать код