Ce tipuri de probleme beneficiază de calcul paralel

Scrierea codului R eficient

Colin Gillespie

Jumping Rivers & Newcastle University

Gătit

Un ajutor în plus

Prea mulți bucătari

Prea mulți bucătari strică bucatele

Scrierea codului R eficient

Rulare în paralel

  • Nu orice analiză poate utiliza mai multe nuclee
    • Mulți algoritmi statistici pot folosi un singur nucleu

Unde poate ajuta calculul paralel?

Scrierea codului R eficient

Simulări Monte-Carlo

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • Mașină cu 8 nuclee
    • O simulare per nucleu
    • Combinarea rezultatelor la final
  • Paralel în mod evident
Scrierea codului R eficient

Nu totul rulează în paralel

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
x[8] = x[7] = ... x[2] = x[1] = 1
  • Poate fi rulat în paralel?
    • NU
      • Ordinea de evaluare în calculul paralel nu poate fi prevăzută
      • Rezultatul va fi greșit, deoarece x[3] poate fi evaluat înaintea lui x[2]
Scrierea codului R eficient

Regulă practică

Poate fi bucla rulată și în sens invers?

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

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • Ambele bucle produc același rezultat
  • Prin urmare, putem rula buclele în paralel
Scrierea codului R eficient

Regulă practică

Poate fi bucla rulată și în sens invers?

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
for(i in 8:2)
    x[i] <- x[i-1]
  • Buclele dau rezultate diferite
    • Prima: x[8] = x[7] = ... = 1
    • A doua: x[8] = x[7] = 7
  • Nu se poate folosi calcul paralel

Rețineți: Dacă bucla poate fi rulată în sens invers, probabil se poate folosi calculul paralel.

Scrierea codului R eficient

Să exersăm!

Scrierea codului R eficient

Preparing Video For Download...