Ar trebui să paralelizăm?

Programare paralelă în R

Nabeel Imam

Data Scientist

Să construim o clădire

   

Ridicarea unui etaj deasupra celuilalt: secvențial

 

Montarea ferestrelor pe structura finalizată: paralel

O clădire în construcție. Etajele pot fi ridicate doar în secvență, în timp ce ferestrele pot fi montate în paralel.

Programare paralelă în R

Scala secvențial-paralel

Sarcinile de calcul frecvente sunt plasate pe o scală, de la secvențial la paralel. Crearea de variabile noi este aproape de capătul paralel, iar suma cumulativă de cel secvențial.

Programare paralelă în R

O operație numerică clasică

Calculul rădăcinilor pătrate a unui milion de numere

numbers <- 1:1000000


start <- Sys.time() sq_roots <- lapply(numbers, sqrt) end <- Sys.time()
end - start
Time difference of 1.044573 secs
Programare paralelă în R

Cum am putea paraleliza rădăcina pătrată?

Diagramă pentru calculul paralel al rădăcinilor pătrate. Numerele întregi de la unu la un milion sunt împărțite în cinci grupuri, fiecare cu 200.000 de elemente.

Programare paralelă în R

Cum am putea paraleliza rădăcina pătrată?

Datele divizate sunt trimise unui cluster format din mai multe nuclee. Fiecare grup de numere este trimis unui nucleu pentru calculul rădăcinii pătrate. Dacă toate nucleele sunt ocupate, grupurile noi așteaptă eliberarea unui nucleu.

Programare paralelă în R

Cum am putea paraleliza rădăcina pătrată?

Rădăcinile pătrate sunt colectate de la fiecare nucleu și combinate pentru a obține un milion de rădăcini pătrate.

Programare paralelă în R

O operație numerică paralelizată

Rădăcinile pătrate a unui milion de numere, în paralel

library(parallel)


my_cluster <- makeCluster(3)
start <- Sys.time() sq_roots <- parLapply(my_cluster, numbers, sqrt) end <- Sys.time()
stopCluster(my_cluster)
end - start
Time difference of 0.8416824 secs
Programare paralelă în R

Nu la fel de rapid pe cât ne așteptam

Diagramă pentru calculul paralel al rădăcinilor pătrate ale numerelor de la unu la un milion.

Programare paralelă în R

Nu la fel de rapid pe cât ne așteptam

Execuția paralelă implică mai multe sarcini suplimentare. Prima este divizarea datelor.

Programare paralelă în R

Nu la fel de rapid pe cât ne așteptam

După divizare, fiecare subgrup de date trebuie copiat pe nucleele din cluster.

Programare paralelă în R

Nu la fel de rapid pe cât ne așteptam

După calcul, rezultatele fiecărui nucleu trebuie colectate pentru a obține rezultatul final.

Programare paralelă în R

Nu la fel de rapid pe cât ne așteptam

O parte din resursele de calcul sunt consumate pentru orchestrarea întregului proces.

Programare paralelă în R

Deci, ar trebui să paralelizăm?

Pentru o sarcină suficient de complexă, luați în considerare:

Avantaje

  • Mai rapid decât secvențial
  • Mai rentabil pe termen lung

 

Dezavantaje

  • Necesită abilități speciale de programare (dar dumneavoastră sunteți pregătit!)
  • Consum ridicat de memorie
Programare paralelă în R

Să exersăm!

Programare paralelă în R

Preparing Video For Download...