Chronométrage avec parSapply()
Exécuter le jeu de dés est un cas d'embarassingly parallel. Ce type de simulation
offre généralement (mais pas toujours) une bonne accélération. Comme précédemment, nous pouvons utiliser microbenchmark()
ou system.time(). Pour simplifier, nous allons utiliser system.time() dans cet exercice.
Cette activité fait partie du cours
Écrire du code R efficace
Instructions de l’exercice
La fonction play() a été définie dans votre espace de travail. Supposons que vous souhaitiez jouer cent mille parties.
- Assignez
no_of_gamesà1e5. - Utilisez
system.time()pour chronométrer les appels répétés àplay()en sériel.- Appelez
sapply()avec1:no_of_gameset la fonction englobanteplay(). - Assignez le résultat à
serial. - Encapsulez cet appel dans
system.time()pour le chronométrer.
- Appelez
- Créez un objet cluster de 4 cœurs et exportez-y la fonction
play(). - Utilisez
system.time()pour chronométrer les appels répétés àplay()en parallèle.- Retravaillez le code utilisé pour créer
serial, mais faites-le fonctionner en parallèle.
- Retravaillez le code utilisé pour créer
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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)