1. Definiti noțiunea de sistem informatic distribuit.
Prin sistem distribuit de calcul sau sistem informatic distribuit se înţelege o mulţime de programe peste o reţea de noduri (calculatoare, multiprocesoare, procesoare paralele masive, staţii de lucru, clustere, grid ..) care au acces fiecare la o memorie proprie (dar pot avea acces şi la anumite memorii comune partajate), fiind conectate între ele prin nişte linii de comunicaţie (fir, fibră optică, unde radio, sateliţi), având diverse topologii de conexiune (magistrală comună, stea, ...), sistemul fiind conceput cu scopul partajării unor resurse sau/şi pentru rezolvarea concurentă a unor aplicaţii paralele sau paralelizabile.
2. Caracteristicile de bază ale sistemelor distribuite.
Din modul de definire a sistemelor distribuite rezultă câteva caracteristici de bază ale lor: • concurenţa: se poate lucra simultan pe diferite computere din reţea, eventual partajându-se aceleaşi resurse (pagini web, fişiere, etc.); • lipsa unui ceas global: există limite în ceea ce priveşte capacitatea computerelor din reţea de a-şi sincroniza ceasurile interne; • rezistenţa la erori: un defect în reţea poate duce la izolarea unor computere, însă reţeaua va funcţiona în continuare şi de obicei programele care vor rula pe nodul deconectat nu vor detecta că a fost întreruptă conexiunea sau că aceasta a devenit neobişnuit de înceată, ba mai mult, nici celelalte noduri din sistem nu vor sesiza imediat că unul din noduri a căzut.
3. Principalele caracteristici ale arhitecturii MIMD cu memorie distribuită.
Un sistem de tip MIMD cu memorie distribuită foloseşte de regulă drept procesoare, transputere . Un transputer este un cip microprocesor cu memorie adiţională, ALU şi facilităţi de comunicare. Diferenţa principială dintre MIMD cu memorie distribuită şi MIMD cu memorie partajată constă în modul de comunicare între procesoare. În primul model comunicarea se realizează prin transmitere de mesaje, iar în al doilea prin intermediul memoriei comune, care este partajată de cele n procesoare simple.
4. Explicați de ce în proiectarea algoritmilor paraleli se prefera o anumita
distanțare față de arhitectură. Algoritmii paraleli folosesc resursele specifice unui sistem de calcul paralel (un număr de p procesoare) pentru rezolvarea unei probleme. Un algoritm secvenţial poate fi paralelizat dacă secvenţa de operaţii elementare generată poate fi descompusă în p subsecvenţe, în aşa fel încât operaţiile din fiecare subsecvenţă să poată fi executate concurenţial de procesoarele disponibile. Există situaţii în care această descompunere este naturală, în general însă, algoritmul secvenţial cel mai natural pentru rezolvarea unei probleme nu conduce la o împărţire în astfel de subsecvenţe. Limbajul C# permite implementarea aplicaţiilor paralele printr-o librărie MPI (Message Passing Interface) . Pentru înţelegerea structurii unui program paralel implementat în MPI.NET, această lucrare prezintă aplicaţia PingPong în care are loc un transfer de mesaje între p procese, care pot fi pornite pe calculatoare diferite. Procesul 0 primeşte şi afişează numele staţiilor pe care au fost pornite celelalte procese. După cum se poate observa în codul sursă al aplicaţiei, prezentat mai jos, aceste transferuri de mesaje sunt efectuate prin instrucţiunile Send şi Receive existente în librăria MPI. În programare un algoritm de calcul paralel sau concurent, în opoziție cu unul secvențial, este un algoritm care poate fi executat (simultan) pe porțiuni pe mai multe mașini de calcul, apoi reasamblat pentru aflarea rezultatului final. Algoritmii de calcul paralel sunt importanți datorită îmbunătățirilor aduse sistemelor de calcul multiprocesor. În general e mai ușor să construiești un singur microprocesor rapid decât o serie de microprocesoare lente care îndeplinesc aceeași funcție. În prezent creșterea vitezei unui singur procesor nu mai este posibilă atingăndu-se pragul superior în ceea ce privește mărimea și temperatura de funcționare. Atingerea acestui prag face practică implementarea de sisteme multiprocesor și pe sistemele de dimensiuni reduse cum ar fi calculatoarele personale. Există mai multe modalităţi de obţinere a algoritmilor paraleli: -prin multiplicare şi izolare, adică fiecare procesor execută în mod independent acelaşi program, fiind izolat de restul procesoarelor (acelaşi program, date locale diferite, fără comunicare între procesoare); -prin paralelism spaţial, fiecare procesor executând acelaşi program dar asupra unor date locale rezultate în urma unei divizări a domeniului datelor (acelaşi program, date locale diferite, comunicare pentru datele de la frontiera domeniului); -prin paralelism algoritmic, fiecare procesor fiind responsabil de o anumită parte din program, toate datele trecând prin fiecare procesor (secvenţe de program diferite, date globale, comunicare prin intermediul unei memorii comune); algoritmii paraleli pot fi numerici (se execută calcule cu numere), sau nenumerici (se execută operaţii de căutare, sortare ş.a.).
5. Care sunt principalele caracteristici ale algoritmului SAMO ?
B. Toate procesele executa aceeași intrucțiune;
6. În nucleul de comunicare prin mesaje, orice operație de comunicare poate
fi descrisă utilizând doar doua primitive de comunicare. Care sunt acestea? Prezentați rolul lor. Sistemul PVM este alcătuit din două componente: • Prima parte este reprezentată de un demon, numit pvmd3 sau pvmd, care trebuie lansat pe fiecare procesor fizic participant la maşina virtuală. Denumirea demon vine de la faptul că respectivul program este lansat în background (în fundal) şi rămâne în aşteptarea unei solicitări la care să răspundă. Acest demon a fost proiectat, astfel încât orice utilizator să-l poată instala pe orice maşină, dacă dispune de un login valid. Când un utilizator doreşte să ruleze o aplicaţie PVM, va trebui să-şi creeze maşina virtuală si apoi să pornească maşina. O aplicaţie PVM poate fi pornită de la orice gazdă. Mai mulţi utilizatori pot configura maşini virtuale care se pot suprapune, iar fiecare utilizator poate executa câteva aplicaţii PVM simultan. • A doua componentă este reprezentată de o bibliotecă de rutine PVM. Aceasta conţine un set complet de primitive care sunt necesare pentru cooperarea între taskuri . Conţine setul de funcţii prin intermediul cărora o aplicaţie PVM poate folosi mecanismele de schimb de mesaje, sincronizare între procese, de creare de noi procese sau de modificare a maşinii virtuale oferite de PVM. Deoarece PVM suportă programe scrise în limbajele C si FORTRAN, vor exista de fapt două biblioteci, una pentru C (libpvm3.a) si alta pentru FORTRAN (libfpvm3.a). Modelul de calcul utilizat se bazează pe faptul că o aplicaţie este alcătuită din mai multe taskuri. Fiecare task este responsabil pentru calculul unei părţi a problemei. O aplicaţie poate accesa resursele de calcul în trei moduri diferite: • modul transparent - în care taskurile sunt plasate automat de sistem pe maşina cea mai potrivită, fără intervenţia utilizatorului. • modul dependent de arhitectură - în care utilizatorul poate indica o arhitectură specifică pe care un task să fie executat. • modul „lowe-level”, cu specificare a maşinii - în care utilizatorul poate specifica o maşină anume pe care să se execute un anumit task. Această flexibilitate permite diferitelor taskuri ale unei aplicaţii să exploateze eficient puterea de calcul din cadrul maşinii virtuale. Dacă o aplicaţie este paralelizată din punct de vedere al funcţiilor pe care le realizează, adică fiecare task execută o funcţie diferită (de exemplu intrare, soluţionare, ieşire, afişare), acest proces se numeşte paralelism funcţional. O altă metodă de paralelizare este exploatarea paralelismului datelor. În cadrul acestei metode toate taskurile sunt identice, dar fiecare din ele deţine şi utilizează pentru rezolvare numai o parte din date. Acest model mai este denumit SPMD (Single Program Multiple Data). Ambele modele, sau o combinaţie a lor, pot fi utilizate pentru a dezvolta o aplicaţie PVM. Toate taskurile PVM sunt identificate cu un întreg numit task identifier (TID). Aceste TID-uri trebuie să fie unice în cadrul maşinii virtuale si sunt asigurate de demonul pvmd local (deci nu sunt alese de utilizator). PVM conţine rutine care returnează valoarea TID, astfel încât aplicaţiile pot identifica taskurile din sistem. Pentru a programa o aplicaţie, un utilizator va scrie unul sau mai multe programe secvenţiale în C, C++, Fortran 77, cu apeluri la rutinele din bibliotecile PVM. Fiecare program va fi de fapt un task, toate aceste taskuri formând aplicaţia, a cărui execuţie poate fi paralelizată prin intermediul unor primitive de comunicaţie prin mesaje, tipice oricărei maşini MIMD cu memorie distribuită. În acest fel, prin schimb de mesaje, mai multe task- uri pot coopera pentru rezolvarea paralelă a unei probleme. Fiecare task va fi compilat pentru fiecare arhitectură existentă în host-pool şi fişierele se vor plasa la locaţii accesibile maşinilor din host-pool. Pentru a executa o aplicaţie, un utilizator iniţiază o copie a unui task (numit task master) de la o maşină din host-pool, iar acesta va iniţia taskuri PVM care pot fi rulate pe alte maşini sau pe aceeaşi maşină cu taskul master. Acesta este scenariul tipic, dar pot exista situaţii în care mai multe taskuri sunt iniţiate de utilizator, iar ele pot iniţia la rândul lor alte taskuri. Consola PVM Consola PVM este un task PVM de sine stătător care permite utilizatorului să pornească, să interogheze şi să modifice maşina virtuală. Consola poate fi pornită si oprită de mai multe ori pe orice gazde din PVM fără a afecta rularea PVM sau a altor aplicaţii. La pornire consola PVM determină dacă nu cumva aceasta rulează, dacă nu, pvm execută pvmd pe acea gazdă şi apoi execută pvmd, dar de această dată cu opţiunea slave, pe celelalte gazde din configuraţie.
7. Prezentati pe scurt algoritrmii paraleli de insumare a N numere.
Algoritmii paraleli de însumare a N numere sunt: - Algoritmul secvențial uzual de calul al sumei, prin care calculele se desfășoară în ordine crescătoare a indicilor, al sumelor parțiale, pur secvențial, iar graful de precedență este o listă, fiecare nivel fiind format dintr-un singur task. Complexitatea paralelă este de (n-1) operații, identică cu cea secvențială. - Paralelismul maxim este a doua variantă prin care se efectuează numărul maxim de adunări care pot decurge în paralel. Se adună Xi+X i+1, pentru toți i pari, obținându-se astfel n/2 numere, pentru care se repeat algoritmul. La fiecare pas, lungimea șirului de numere se înjumătățește, deci complexitatea esste log n, unde n este o putere a lui. Se observă diferența enormă înntre cele două variante, provenind exclusive din împărțirea în tqaskuri a operațțiilor, ordonări diferite ale operațiilor. Secvențial, algoritmii au același număr de operații.. - Algoritmi pentru PRAM - Algoritmi pentru MIMD cu memorie distribuită Generalizare: colectare cu sumare. Toţi algoritmi din această secţiune sunt valabili nu numai pentru sumă , ci şi pentru o altă operaţie, cu singura condiţie ca aceasta să fie asociativă , iar ptr algoritmul 4.3 să fie comutativă.