Sunteți pe pagina 1din 6

Nume şi prenume cursant: Potlog (căs.

Creţu) Anca Ioana


Grupa: Informatică 3 semestre , martie 2020

TEST la Algoritmi Paraleli

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ă.

S-ar putea să vă placă și