CommencerCommencer 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

Écrire du code R efficace

Afficher le cours

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