Programare paralelă în mediul matlab

În prezent, limba MATLAB este limba principală de calcul tehnic. Există aproximativ un milion de utilizatorii săi din întreaga lume, mulți dintre ei văd avantajul puterii a crescut oferite de procesoare multi-core disponibile în mod obișnuit și clustere de calcul multi-nod. mediul MATLAB este, de asemenea, ideal pentru studiul de calcul paralel, permițând utilizatorilor să se concentreze în primul rând pe algoritmi paraleli, mai degrabă decât pe detaliile de implementare. Concisitatea limbajului MATLAB face posibilă prezentarea multor exemple specifice, ca o ilustrare a conceptelor de bază ale programării paralele.






Această carte este dedicată implementării practice a metodelor și aspectelor computaționale de calcul științific de înaltă performanță, cu accent pe software-ul exigent, mediile de calcul și instrumentele de calcul. Acesta acoperă dezvoltarea de tehnologii software, cum ar fi starea curentă, aplicații și algoritmi, software pentru rezolvarea problemelor matematice, instrumente software, limbi și compilatoare, medii de calcul și vizualizare.
Publicul țintă al cărții aparține oricărei persoane care se confruntă cu sarcina de a adapta programul secvențial MATLAB la un mediu paralel. În plus, poate fi folosit ca manualul principal în clasă pentru calculul paralel sau ca supliment pentru citirea în clasele de studiere a metodelor numerice sau a algoritmilor informaticii.

Principii fundamentale

Concepte de bază: sistem de înregistrare și interfețe

Acest capitol prezintă un sistem de notație matematică pentru descrierea algoritmilor paraleli și analizează, de asemenea, setul corespunzător de funcții paralele din biblioteca pMATLAB. Se prezintă o metodă de programare paralelă bazată pe mapări și se dă un exemplu de utilizare a înregistrării paralele și a datelor de funcții.

În această carte, luăm în considerare problema programării paralele, care necesită o descriere concisă a algoritmilor paraleli. În aceste scopuri, se folosește limba matematică. În acest capitol vom oferi informații succinte despre notația matematică de bază folosită pentru a descrie algoritmii paralele întâlnite în manual. Sistemul de înregistrare (dacă este necesar) va fi completat pe măsură ce este scrisă cartea (pentru mai multe informații despre acest sistem de înregistrare, consultați Anexa).

Pentru a implementa aceste algoritmi, MATLAB necesită un set de funcții paralele care corespund algoritmilor paraleli. Deși se presupune că cititorul este familiarizat cu pachetul MATLAB, cu toate acestea, noi funcții sunt utilizate pentru a scrie programe paralele pe MATLAB. Cartea este scrisă ținând cont de o submulțime limitată a interfeței bibliotecii pMATLAB. Acest capitol oferă o scurtă descriere a unora dintre funcțiile cheie utilizate pentru a scrie algoritmi paraleli în întreaga carte. Aceste funcții (dacă este necesar) pot fi extinse în următoarele capitole.

Sistemul de înregistrare al algoritmului

Numerele reprezintă unitățile de bază care vor fi gestionate de algoritmii prezentați în această carte. Numerele pot avea diferite tipuri: booleene, întregi, reale, complexe ...

Introducere în pMATLAB

Bine ați venit la programarea paralelă în MATLAB. În cursul cunoașterii acestui capitol, cititorul va putea vedea avantajele realizării mai multor programe paralele pe MATLAB. În acest capitol este prezentat un scurt rezumat al mai multor programe, care oferă o idee despre principiile de bază ale scrierii și executării unui set de programe paralele. Fiecare exemplu este autosuficient și poate fi considerat independent de ceilalți. Următoarele secțiuni au aceeași structură. Fiecare secțiune este deschisă de subsecțiunea "Noțiuni de bază", în care programul rulează pe diferite procesoare, în timp ce studiază rezultatul și înregistrează timpul de execuție. A doua subsecțiune prezintă aspectul matematic al problemei, precum și implementarea paralelă de bază. A treia subsecțiune descrie modul în care a fost scris programul paralel pe MATLAB. A patra sub-secțiune descrie procesul de depanare a unui program. Secțiunea se încheie cu un studiu al caracteristicilor de timp și o estimare a productivității globale. La sfârșitul acestui capitol, discutarea activității programelor și a performanțelor ridicate.

Interacțiunea cu matricele distribuite

Un exemplu de program cu mai multe etape cu intrare / ieșire este prezentat pentru a demonstra modul în care se pot dezvolta astfel de programe utilizând matrice distribuite. Programul creează date simulate dintr-un senzor multi-canal și apoi procesează un set de date. Acest exemplu arată, de asemenea, modul de lucru cu matrice distribuite în timpul procesului de depanare și testare. În particular, luăm în considerare tipurile de informații care pot fi extrase din rețelele distribuite în timpul execuției programului.







În acest capitol, se studiază o aplicație în mai multe etape cu I / O. Acesta este construit pe conceptele prezentate în capitolul precedent, cu scopul de a crea un program mai complex folosind matrice distribuite. Sarcina principală este de a rula programul într-un proces de depanare în patru pași și de a examina interactiv matricele distribuite pentru a afla ce poate fi văzut la fiecare pas. Acest exemplu ilustrează modul de interacțiune cu rețelele distribuite și acoperă, de asemenea, unele aspecte legate de programele paralele în mai multe etape.

Tehnici de complexitate sporită

Modele de programare paralelă

Folosind exemplul unui program paralel cu o masă non-trivială (Blutime), sunt ilustrate compromisurile cheie în proiectare, codare, depanare și testare asociate programării paralele. Când luăm în considerare programul Blutime, se dezvăluie un număr mare de întrebări legate de punerea în aplicare a acestor etape. În plus, capitolul va oferi, de asemenea, o scurtă prezentare a modelelor de bază ale programării paralele: arhitecturi distribuite, mesagerie și schema manager / subordonată.

Acest capitol are scopul de a obține cititorului o imagine mai largă asupra compromisurilor de proiectare, codare, depanare și testare a codurilor asociate programării paralele. Principala sarcină a capitolului este identificarea unei game largi de probleme legate de aplicarea acestor principii. În plus, este prezentată o scurtă prezentare a modelelor de bază ale programării paralele: semantica matricelor distribuite, schimbul de mesaje și schema manager / subordonată. Unele principii discutate în acest capitol includ următoarele aspecte.

Proiectare: evaluarea nevoii de paralelizare, clase de programe paralele, modele de programare paralelă, modele de mașini.

Codificare: diferite stiluri de programare paralelă, impactul codului asupra performanței și scalabilității.

Debug: caracteristicile procesului de depanare paralelă, erori care pot fi detectate la fiecare pas.

Testarea: măsurarea și estimarea performanței (în raport cu setările computerului).

Programul utilizat ca exemplu principal în acest capitol este mai complex decât programele prezentate în Capitolul 2. Se intenționează să se identifice unele dintre limitările inerente diferitelor modele de programare paralelă.

Proiectare: evaluarea nevoii de paralelizare

Singura soluție cea mai importantă pentru programarea paralelă este evaluarea nevoii de calcul paralel. Există două și numai două motive pentru a utiliza un calculator paralel.

  • Timpul: calculul pe un singur procesor durează prea mult timp.
  • Memorie: Pentru a efectua un calcul, este necesară mai multă memorie decât un procesor poate oferi.

Foarte des există ambele motive. Executarea programelor care necesită cantități mari de memorie necesită adesea o lungă perioadă de timp. Cu toate acestea, cum determină programatorul MATLAB dacă aceste condiții există? Conceptul de timp petrecut este foarte subiectiv. În mod obișnuit, acest lucru înseamnă că calculul durează ore sau zile, dar uneori zece minute sunt considerate o perioadă lungă. "Memoria" este un concept mai puțin subiectiv. Computerul are o memorie de o anumită sumă, iar în cazul în care programul încearcă să utilizeze memorie mai mult decât existente, în acest caz, fie primesc o eroare „Out of Memory“, un program începe să încetinească în mod semnificativ în jos munca ta, deoarece sistemul de operare încearcă să utilizeze mijloacele de stocare locale ca o memorie (acest lucru fenomenul se numește "swapping"). Din fericire, MATLAB are unele instrumente integrate care ajută să se determine nu numai cantitatea de timp și de memorie necesară pentru a rula programul, dar, de asemenea, părțile sale specifice care necesită cea mai mare cantitate de timp și de memorie. Funcțiile acestor instrumente vor fi afișate în mod clar pentru a începe într-un program simplu de procesare a imaginilor (Blurimage).

Dezvoltarea programelor complexe cu retele distribuite

Pentru a utiliza efectiv matrice distribuite, trebuie să înțelegeți tehnologia de bază utilizată pentru a le implementa. Matricele distribuite MATLAB sunt implementate în cea mai mare parte în bibliotecă folosind metode de supraîncărcare a operatorilor de programare orientată obiect. Structura principală a datelor din bibliotecă este reprezentată de o matrice numerică distribuită, a cărei distribuție pe un număr de procesoare este determinată de structura hărții de locație. Operațiile de comunicare între rețelele distribuite se află la nivelul inferior al abstractizării, care nu este vizibil pentru utilizator. Tipurile de distribuție a datelor acceptate de hărți, de regulă, fac parte din clasa blocurilor N-dimensionale bloc-ciclice cu suprapunere. Distribuțiile blocurilor sunt cele mai des folosite. Alocările ciclice pot fi adesea utile în rezolvarea problemelor de echilibrare a încărcării. Biblioteca distribuită este bazată pe o bibliotecă de mesaje punct-la-punct, de exemplu, pe Interfața de transfer de mesaje (MPI). Biblioteca de mesaje stabilește limita de bază privind performanța comunicației în biblioteca distribuită.

Metrici de performanță și arhitectură software

Metricile de performanță reprezintă un instrument neprețuit pentru implementarea programelor paralele, care sunt extrem de eficiente, la minimizarea costului software-ului. Acest capitol descrie anumite valori de performanță și arată cum să le folosiți pentru a lua deciziile corecte cu privire la implementarea aplicației. În timpul prezentării acestor valori, este descris un sistem standard de calcul paralel și se are în vedere efectul performanței asupra diferitelor modele de programare paralelă.

Un program eficient MATLAB paralel este greu de scris datorită numărului mare de factori suplimentari care trebuie luați în considerare, pe lângă corectitudinea funcțională de bază a programului. Acești factori sunt enumerați mai jos.

  • Performanță: latență și debit.
  • Eficiență: procesare, lățime de bandă și memorie.
  • Costurile software-ului: dimensiunea și portabilitatea codului.
  • Costuri hardware: dimensiune și putere.

Metricile de performanță reprezintă un instrument important care permite dezvoltatorului de programe paralele MATLAB să facă o alegere în cunoștință de cauză a metodei de programare și implementare.

Acest capitol se concentrează asupra măsurărilor de performanță și a arhitecturilor software concepute pentru a implementa aplicații paralele care ajută la reducerea la minimum a costurilor software-ului, respectând în același timp cât mai multe alte cerințe. În special, vom analiza diferite arhitecturi software care pot fi folosite pentru a aplica calcule paralele concepute pentru a obține performanțe ridicate. În acest sens, factorii dominanți ai arhitecturii software-ului paralel sunt următorii.

Studii de caz

Analiza aplicațiilor paralele







Articole similare

Trimiteți-le prietenilor: