CommencerCommencez gratuitement

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

<cours>Écrire du code R efficace</cours>
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.

  • Définissez no_of_games à 1e5.
  • Utilisez system.time() pour chronométrer les appels répétés de play() en série.
    • Appelez sapply() avec 1:no_of_games et la fonction d’enrobage play().
    • Affectez 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 de play() en parallèle.
    • Adaptez le code utilisé pour créer serial afin qu’il fonctionne 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