ComeçarComece de graça

Medições com parSapply()

Rodar o jogo de dados é um caso de embarrassingly parallel. Esse tipo de simulação geralmente (mas nem sempre) traz um bom ganho de desempenho. Como antes, você pode usar microbenchmark() ou system.time(). Para simplificar, vamos usar system.time() neste exercício.

Este exercício faz parte do curso

Escrevendo código R eficiente

Ver curso

Instruções do exercício

A função play() já está definida no seu workspace. Vamos supor que você quer jogar cem mil partidas.

  • Defina no_of_games como 1e5.
  • Use system.time() para medir o tempo de play() sendo chamada repetidamente em série.
    • Chame sapply() com 1:no_of_games e a função wrapper play().
    • Atribua o resultado a serial.
    • Envolva essa chamada em system.time() para cronometrar.
  • Crie um objeto de cluster com 4 núcleos e exporte a função play() para ele.
  • Use system.time() para medir o tempo de play() sendo chamada repetidamente em paralelo.
    • Reaproveite o código que você usou para criar serial, mas faça-o funcionar em paralelo.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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)
Editar e executar o código