Calcul paralel

De la Wikipedia, enciclopedia liberă

Calcul paralel înseamnă execuţia simultană pe mai multe procesoare a aceleiaşi probleme (împarţită şi special adaptată), pentru a obţine rezultatele mult mai rapid. Ideea de bază este aceea că procesul de rezolvare a unei probleme poate fi, de obicei, împărţit în mai multe probleme mai mici care pot fi rezolvate simultan cu ajutorul unei anumite coordonări.

Cuprins

[modifică] Sisteme de calcul paralel

Un sistem de calcul paralel este un computer cu mai multe procesoare care lucrează în paralel. Noile procesoare multimiez sunt de asemenea sisteme de calcul paralel.

Există multe tipuri diferite de sisteme de calcul paralel, deosebite prin tipul de interconectare între procesoarele componente (cunoscute ca şi elemente de procesare sau PEs) şi între procesoare şi memorie. Taxonomia lui Flynn clasifică sistemele de calcul paralel (şi serial) astfel:

  • dacă toate procesoarele execută aceeaşi instrucţiune în acelaşi timp (instrucţiune simplă/date multiple --SIMD)
  • dacă fiecare procesor executa instructiuni diferite (instrucţiuni dtferite/date multiple --MIMD).

    O altă clasificare a sistemelor de calcul paralel este bazată pe arhitectura memoriei. Sistemele de calcul paralel cu memorie partajată au multiple procesoare care accesează toată memoria disponibilă ca un spaţiu de adresă global. Acestea pot fi împarţite în două mari clase în funcţie de timpul de acces la memorie. Acces uniform al memoriei(UMA) în care timpii de acces la toate părtile memoriei sunt egali sau acces neuniform al memoriei (NUMA) în care timpii de acces la memorie nu sunt egali. Sistemele de calcul paralel cu memorie distribuită au de asemenea mai multe procesoare dar fiecare procesor poate accesa doar memoria sa locală; nu există nici un fel de spaţiu de adresă global între ele.

    Sistemele de calcul paralel pot fi de asemenea clasificate după numărul de procesoare din componenţa lor.Sistemele cu mii de asemenea procesoare sunt cunoscute ca şi massively parallel. Urmează sistemele de calcul paralel la scară mare sau la scară mică. Aceasta depinde de marimea procesorului (de exemplu: un sistem de calcul paralel bazat pe un computer personal va fi considerat un sistem la scară mică).

    Sistemele de calcul paralel pot fi împărţite în sisteme multiprocesor simetrice si asimetrice, dacă toate procesoarele sunt de acelaşi fel sau nu (de exemplu: dacă doar un procesor poate rula codul sistemului de operare şi celelalte nu au acest privilegiu).

    O mare varietate de arhitecturi au fost dezvoltate pentru procesare paralelă. Spre exemplu o arhitectură de tip Ring are procesoarele legate într-o structură de tip inel. Alte tipuri de arhitecturi: Hypercube, Fat tree, Systolic array ş.a.m.d.

    [modifică] Teorie şi practică

    Sistemele de calcul paralel pot fi modelate ca şi sisteme de calcul cu acces aleator (Parllel Random Acces Machines). Modelul PRAM ignoră costurile interconectării între componentele sistemului dar este foarte util pentru obţinerea de prestaţii superioare în multe cazuri de calcul paralel. În realitate interconectarea joacă un rol foarte important.

    Procesoarele pot comunica sau coopera în rezolvarea unei probleme sau pot funcţiona independent adeseori sub comanda unui alt procesor care distribuie problemele de rezolvat şi colectează rezultatele obţinute de fiecare procesor (ferma de procesoare).

    Procesoarele dintr-un sistem de calcul paralel pot comunica între ele în mai multe feluri inclusiv prin memorie partajată, magistrală partajată sau o reţea interconectată de o multime de topologii incluzînd reţele de tip star, ring, hypercube etc. Sistemele de calcul paralel bazate pe retea interconectată trebuie să posede unele protocoale de routare pentru a permite trecerea mesajelor între nodurile care nu sunt conectate direct. Memoria poate fi privată pentru fiecare procesor, comună între un număr de procesoare sau globală

    [modifică] Performanţă versus costuri

    Deoarece un sistem de calcul paralel cu n procesoare este mai puţin eficient decît un procesor de n-ori mai rapid, rezultă că sistemul de calcul paralel este de obicei mai ieftin de construit. Calculul paralel este folosit pentru probleme care necesită foarte multe calcule, durează foarte mult şi poate fi împarţit în n subprobleme independente . În ultimii ani, cele mai performante sisteme de calcul, cunoscute de asemenea ca şi supercomputer, au arhitecturi paralele.

    [modifică] Terminologie în calcul paralel

    Unii din termenii folosiţi frecvent în calculul paralel sunt:

    • Task: o sectiune independentă ,logică dintr-o problema de rezolvat executată de un procesor ca un program .
    • Sincronizare:-coordonarea sarcinilor simultane pentru a asigura corectitudinea şi a evita dezordinea în recepţionarea rezultatelor.
    • Speedup: denumită de asemenea şi parallel speedup arată de câte ori este mai rapid un algoritm paralel decât algoritmul serial corespunzător.
    • Scalabilitate: abilitatea unui sistem de calcul paralel de creşte viteza de execuţie proporţional cu adăugarea de noi procesoare.

    [modifică] Algoritmi

    Algoritmii paraleli pot fi construiţi remodelând algoritmi seriali ca să folosească resursele sistemului de calcul paralel. Nu toţi algoritmii seriali pot fi paralelizaţi. Acest lucru este mai bine spus într-o zicală: o femeie poate avea un copil în nouă luni, dar nouă femei nu pot avea un copil într-o lună. În practică acceleraţia liniară (acceleraţia proporţională cu numarul de procesoare) este foarte dificil de obţinut. Aceasta pentru că prin natura lor mulţi algoritmi sunt secvenţiali (legea lui Amdahl arată mai bine acest lucru). Unele probleme pot beneficia de pe urma paralelismului tip în secventă(pipeline) când sunt adăugate noi procesoare. În acest caz se foloseşte abordarea în stil linie de asamblare pentru a împarţi problema. Dacă problema poate fi împărţită în n etape si un rezultat parţial este pasat de la etapă atunci pot fi folosite până la n procesoare, dar cea mai înceată etapă va ţine în loc celelalte etape şi, deci, rar se vor folosi cele n procesoare la capacitate maximă.

    [modifică] Probleme de calcul paralel

    Cele mai cunoscute seturi de probleme de calcul paralel sunt:

    [modifică] Programare în calcul paralel

    Programarea în calcul paralel este conceperea, implementarea şi acordarea programelor, pentru a beneficia de avantajele sistemelor de calcul paralel şi de asemenea se referă la aplicarea metodelor de programare paralelă asupra programelor seriale (paralelizare).

    Programarea în calcul paralel se axează pe partiţionarea întregii probleme de rezolvat în sarcini separate, alocarea sarcinilor procesoarelor disponibile şi sincronizarea lor pentru a obţine rezultate concludente. Acest tip de programare se poate aplica numai problemelor care sunt paralelizabile, de cele mai multe ori fără a depinde de date. O problemă poate fi partiţionată pe baza descompunerii pe domenii sau pe funcţiuni sau o combinaţie a celor două.

    Există două tipuri de acces în programarea paralelă:

    • paralelism implicit –unde sistemul (compilatorul sau alt program) desparte problema şi alocă sarcinile fiecărui procesor automat(denumite şi compilatoare de paralelizare automate) sau
    • paralelism explicit- unde programatorul trebuie să descrie în programul său cum va fi partiţionată problema de rezolvat

    Mulţi factori şi tehnici au impact asupra performanţelor în programarea paralelă. Astfel echilibrarea încărcării încearcă să ţină toate procesoarele ocupate, mutînd sarcini de la procesoarele mai încărcate la cele mai putin încărcate.

    Unii consideră programarea în calcul paralel ca fiind sinonimă cu programarea concurentă. Alţii trag o linie de demarcaţie între programarea în calcul paralel, care foloseşte şabloane bine definite şi structurate de comunicaţie între procese şi se axează pe execuţia în paralel a proceselor şi programarea concurentă, care de obicei implică definirea de noi şabloane de comunicaţie între procese care au fost făcute concurente din motive altele decât performanţa. În ambele cazuri comunicaţia se face ori prin memoria partajată ori prin mesaje, oricare putând fi implementată în condiţiile celeilalte.

    Programele care lucrează corect într-un sistem cu un singur procesor ar putea să nu funcţioneze bine în mediul paralel. Aceasta pentru că multiple copii ale aceluiaşi program pot interveni între ele, de exemplu accesînd aceeaşi zonă de memorie în acelaşi timp. De accea o programare atentă (sincronizare) este necesară într-un sistem paralel.

    [modifică] Modele de programare în calcul paralel

    Articol principal: en Parallel programming model

    Un model de programare paralelă este un set de tehnologii software care exprimă algoritmi paraleli şi potrivesc aplicaţiile în sisteme de calcul paralel de bază.Cuprinde secţiuni din aplicaţii, limbaje, compilatoare, biblioteci, sisteme de comunicaţie şi sisteme paralele I/O.Programatorii trebuie să aleagă un model potrivit de programare paralelă sau o formă de îmbinare a lor pentru a dezvolta o aplicaţie pe o anumită platformă.

    [modifică] Subiecte în calcul paralel

    Generale:

    Subiecte de discuţie în informatică:

    Limbaje de programare/modele:

    Specifice:

    Companii:

    [modifică] A se vedea şi

    [modifică] Legături externe

    Notă:Acest articol este o traducere din limba engleză.
    Textul original: en Parallel computing