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
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_gamescomo1e5. - Use
system.time()para medir o tempo deplay()sendo chamada repetidamente em série.- Chame
sapply()com1:no_of_gamese a função wrapperplay(). - Atribua o resultado a
serial. - Envolva essa chamada em
system.time()para cronometrar.
- Chame
- Crie um objeto de cluster com 4 núcleos e exporte a função
play()para ele. - Use
system.time()para medir o tempo deplay()sendo chamada repetidamente em paralelo.- Reaproveite o código que você usou para criar
serial, mas faça-o funcionar em paralelo.
- Reaproveite o código que você usou para criar
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)