Quels types de problèmes profitent du calcul parallèle

Écrire du code R efficace

Colin Gillespie

Jumping Rivers & Newcastle University

Cuisine

Un coup de main de plus

Trop de cuisiniers

Trop de cuisiniers gâchent le bouillon

Écrire du code R efficace

Exécuter en parallèle

  • Toutes les analyses n'exploitent pas plusieurs cœurs
    • Beaucoup d'algorithmes statistiques n'utilisent qu'un seul cœur

Alors, où le calcul parallèle aide-t-il ?

Écrire du code R efficace

Simulations de Monte-Carlo

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • Machine à 8 cœurs
    • Une simulation par cœur
    • Combiner les résultats à la fin
  • Parallélisme embarrassant
Écrire du code R efficace

Tout ne s'exécute pas en parallèle

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
x[8] = x[7] = ... x[2] = x[1] = 1
  • Peut-on exécuter ceci en parallèle ?
    • NON
      • Or, l'ordre d'évaluation en calcul parallèle est imprévisible
      • Le résultat sera faux, car x[3] peut être évalué avant x[2]
Écrire du code R efficace

Règle générale

La boucle peut-elle s'exécuter dans les deux sens ?

for(i in 1:8)
    sim[i] <- monte_carlo_simulation()

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • Les deux boucles donnent le même résultat
  • On peut donc exécuter les boucles en parallèle
Écrire du code R efficace

Règle générale

La boucle peut-elle s'exécuter dans les deux sens ?

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
for(i in 8:2)
    x[i] <- x[i-1]
  • Les boucles donnent des réponses différentes
    • La première : x[8] = x[7] = ... = 1
    • La deuxième : x[8] = x[7] = 7
  • Le calcul parallèle est impossible

À retenir : Si vous pouvez exécuter votre boucle à l'envers, vous pouvez probablement utiliser le calcul parallèle.

Écrire du code R efficace

Passons à la pratique !

Écrire du code R efficace

Preparing Video For Download...