Mesures de temps avec parSapply()
L’exécution du jeu de dés est « trivialement parallélisable ». Ce type de simulation
produit généralement (mais pas toujours) un bon gain de vitesse. Comme précédemment, nous pouvons utiliser microbenchmark()
ou system.time(). Pour simplifier, nous utiliserons system.time() dans cet exercice.
Cet exercice fait partie du cours
Écrire du code R efficace
Instructions
La fonction play() a été définie dans votre espace de travail. Supposons que vous souhaitiez jouer cent mille parties.
- Définissez
no_of_gamesà1e5. - Utilisez
system.time()pour chronométrer les appels répétés deplay()en série.- Appelez
sapply()avec1:no_of_gameset la fonction d’enrobageplay(). - Affectez 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 deplay()en parallèle.- Adaptez le code utilisé pour créer
serialafin qu’il fonctionne en parallèle.
- Adaptez le code utilisé pour créer
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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)