Le paquet parallel - parApply

Écrire du code R efficace

Colin Gillespie

Jumping Rivers & Newcastle University

Le paquet parallel

  • Intégré à R depuis 2011
    library("parallel")
    
    • Multiplateforme : fonctionne sous Windows, Linux, Mac
    • Propose des versions parallèles de fonctions standards
Écrire du code R efficace

La fonction apply()

  • apply() est semblable à une boucle for

    • On applique une fonction à chaque ligne/colonne d'une matrice
  • Une matrice de 10 colonnes et 10 000 lignes :

m <- matrix(rnorm(100000), ncol = 10)
  • apply est plus propre qu'une boucle for
res <- apply(m, 1, median)
Écrire du code R efficace

Passer au parallèle

  • Charger le paquet
    • Indiquer le nombre de cœurs
    • Créer un objet de grappe
    • Passer à parApply()
    • Arrêter !
library("parallel")
copies_of_r <- 7
cl <- makeCluster(copies_of_r)
parApply(cl, m, 1, median)
stopCluster(cl)
Écrire du code R efficace

La mauvaise nouvelle

Comme l'a dit Lewis Caroll

The hurrier I go, the behinder I get.

  • Parfois, l'exécution en parallèle est plus lente à cause de la communication entre fils d'exécution
# Version sérielle
apply(m, 1, median)
# Version parallèle
parApply(cl, m, 1, median)
  • Évaluez la performance des deux solutions
Écrire du code R efficace

Passons à la pratique !

Écrire du code R efficace

Preparing Video For Download...