CommencezCommencez gratuitement

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

Voir le cours

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() avec 1:no_of_games et la fonction englobante play().
    • Assignez le résultat à serial.
    • Encapsulez cet appel dans system.time() pour le chronométrer.
  • 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.

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)
Modifier et exécuter le code