Standarde MPI. Aplicat ii Open MPI [607211]
Ministerul Educat ¸iei Nat ¸ionale s ¸i Cercet ˘arii S ¸tiint ¸ifice
Universitatea ”OVIDIUS” Constant ¸a
Facultatea de Matematic ˘a s ¸i Informatic ˘a
Specializarea Informatic ˘a
Standarde MPI. Aplicat ¸ii Open MPI
Lucrare de licent ¸ ˘a
Coordonator s ¸tiint ¸ific:
Conf. univ. dr. Nicola Aurelian
Absolvent: [anonimizat] ˘a Ancut ¸a-Irina
Constant ¸a
2018
Cuprins
Cuprins i
1 Introducere 2
1.1 Sisteme de calcul paralel . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Aplicat ¸ii s ¸tiint ¸ifice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Ce este calculul paralel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Arhitecturi 8
2.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Clasificarea arhitecturilor . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Instalare mediu MPI 14
3.1 Alegere distribut ¸ie Linux.Ubuntu . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Instalare mediu de programare MPI . . . . . . . . . . . . . . . . . . . . . 15
3.3 Executia unui program MPI . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4 Message Passing Interface 21
4.1 Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Comenzi si funct ¸ii specifice MPI . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 Comunicarea colectiv ˘aˆın MPI . . . . . . . . . . . . . . . . . . . . . . . . 26
i
Cuprins Cuprins
Bibliografie 29
1
Capitolul 1
Introducere
1.1 Sisteme de calcul paralel
Tehnologia vectorial ˘a ofer ˘a o abordare eficient ˘a a controlului cantit ˘at ¸ii mari de resurse computat ¸ionale
furniz ˆand suficient ˘a continuitate ˆın structura algoritmic ˘a care poate fi descoperit ˘a. Vectorii
exploateaz ˘a simetriile computat ¸ionale pentru rezolvarea imediat ˘a a operat ¸iilor uniforme pe
seturi de date independente. Totus ¸i, c ˆand un asemenea paralelism nu poate fi g ˘asit, eficient ¸a
are de suferit prin propriet ˘at ¸ile Legilor lui Amdahl, c ˆand port ¸iunile de cod ne-vectorizabile
pot rapid domina cu des ˘avˆars ¸ire timpul de execut ¸ie .
Dou˘a arhitecturi vector-paralele sunt disponibile comunit ˘at ¸ii supercalculelor: Earth Si-
mulator Japonez (ES) s ¸i Cray X1. Pentru a determina de ce le sunt necesare oamenilor de
s ¸tiint ¸ ˘a aceste arhitecturi care se bazeaz ˘a pe modelare s ¸i simulare , este necesar s ˘a evalu ˘am
aceast ˘a abordare arhitectural ˘aˆın contextul cererilor algoritmilor de calcul. Studii precedente
au examinat performant ¸a vector-paralele pentru codul s ¸tiint ¸ific, totus ¸i comparat ¸ii directe ale
aplicat ¸iilor de scal ˘a larg ˘a sunt disponibile ˆın prezent.
ˆIn acest studiu, autorii au comparat arhitecturile bazate pe vectori ES s ¸i X1 cu trei sis-
teme superscalare IBM Power3, Power4, s ¸i SGI Altix. Examin ˘am trei aplicat ¸ii s ¸tiint ¸ifice cu
potent ¸ial s ˘a opereze la scal ˘a foarte mare, de la fizica plasmei (LBMHD), materiale s ¸tiint ¸ifice
(PARATEC) s ¸i astrofizic ˘a (Cactus). Rezultatele demonstreaz ˘a c˘a sistemele vectoriale au
atins performant ¸e excelente pe suita noastr ˘a de aplicat ¸ii – cea mai important ˘a platform ˘a
testat ˘a vreodat ˘a. Totus ¸i, raportul mic dintre performant ¸a scalar ˘a s ¸i cea vectorial ˘a face ca sis-
temele vectoriale studiate s ˘a fie sensibile la nevectorizarea segmentelor de cod – punct ˆand o
dimensiune adit ¸ional ˘a a balant ¸ei arhitecturale ˆın ceea ce prives ¸te sistemele de vectori.
ˆIn plus, vectorizarea unei particule dintr-un element scoate ˆın evident ¸ ˘a o posibil ˘a di-
ficultate ˆın exprimarea algoritmilor neregulat ¸i specifici programelor paralele de date. ES a
ment ¸inut totus ¸i o fract ¸iune semnificant mai mare dec ˆat X1. Rezultatele indic ˘a de asemenea
faptul c ˘a sistemul Altix este o platoform ˘a computat ¸ional ˘a promit ¸ ˘atoare.
Tabelul 1 prezint ˘a un rezumat al caracteristicilor arhitecturale ale celor cinci supercom-
2
Introducere Sisteme de calcul paralel
putere examinate ˆın acest studiu. Observat ¸i faptul c ˘a sistemele vectoriale sunt proiectate cu
o performant ¸ ˘a absolut mai mare s ¸i cu o mai bun ˘a balant ¸a arhitectural ˘a dec ˆat platformele su-
perscalare. ES s ¸i X1 au band ˘a mare de memorie cu privire la CPU (bytes/flop), permit ¸ ˆandu-le
s˘a furnizeze ˆın mod continuu elementele aritmetice operanzilor, mai eficient dec ˆat structu-
rile arhitecturale examinate ˆın studiul nostru. ˆIn plus, vectorii obis ¸nuit ¸i interconectat ¸i au
ar˘atat caracteristici superioare ˆın ceea ce prives ¸te latent ¸a m ˘asurat ˘a, mesajele point-to-point
(m˘arime de band ˘a pe CPU), s ¸i comunicat ¸iile tot ¸i-la-tot ¸i (m ˘arime de band ˘aˆınjum ˘at˘at ¸it˘a) –
atˆatˆın performant ¸a brut ˘a (GB/s) c ˆat s ¸iˆın raportul vitezei procesate (bytes/flop). Per total, ES
apare ca cel mai echilibrat sistem din studiul nostru, ˆın timp ce Altix prezint ˘a cele mai bune
caracteritici arhitecturale dintre platformele superscalare.
Power 3
Power3 cuprinde doar 3 cicluri, ˆın acest mod se utilizeaz ˘a regis ¸trii mai eficient s ¸i se
mics ¸oreaz ˘a penalizarea pentru proasta anticipare a ramific ˘arilor. CPU – ul are 32KB cache
pentru instruct ¸iuni, 128KB 128 – moduri de asociere a datelor cache L1, s ¸i 8MB patru-
moduri de asocierea a mult ¸imilor L2. Fiecare nod SMP cont ¸ine 16 procesoare conectate la
memoria principal ˘a printr-un crossbar. Configur ˘arile multi-nodurilor sunt legate printr-un
switch Colony utiliz ˆand topologia de tip omega.
Power 4
Experimentele Power4 din acest studiu au fost efectuate pe 27-node IBM pSeries 690
rulˆand sistemul AIX 5.2 s ¸i prelucrate de Oak Ridge National Laboratory (ORNL). Fiecare
32-way SMP cuprinde 16 Power4 chip-uri (organizate ca 4 MCMs), unde un chip cont ¸ine
dou˘a nuclee procesor de 1.3 GHz. Fiecare nucleu cont ¸ine dou ˘a FPUs, la o performant ¸ ˘a de
5.2 Gflop/s. Arhitectura superscalar ˘a poate exploata instruct ¸iuni de nivel paralelism ˆın timpul
celor 8 factori de execut ¸ie. Fiecare procesor cuprinde o pipeline relativ lung ˘a (s ¸ase cicluri)
ˆın caz c ˘a este necesar ˘a proiectului de frecvent ¸ ˘a mare.
Altix 300
Ierarhia memoriei cuprinte 128 floating-point (FP) ˆınregistrat ¸i s ¸i trei date on-chil de 32K
pentru L1, 256K pentru L2, s ¸i 6MB pentru L3. Observat ¸i faptul c ˘a Itanium2 nu poate stoca
date FP ˆın cache-ul L1(ci doar ˆın L2), f ˘acˆand regis ¸trii s ˘a porneasc ˘a, totus ¸i, FP-ul relativ mare
atenueaz ˘a aceast ˘a problem ˘a. Procesorul superscalar Itanium2 realizeaz ˘a o combinat ¸ie de
instruct ¸iuni executate la timp s ¸i la expirarea timpului referite ca Explicitly Parallel Instruction
Computing (EPIC). Instruct ¸iunile sunt organizate ˆın pachete VLIW, unde toate intruct ¸iunile
dintr-un pachet pot fi executate ˆın paralel. Totus ¸i aceste instruct ¸iuni trebuie s ˘a fie procesate
ˆın ordine. Interconexiunea Altix utilizeaz ˘a NUMAlink3, o ret ¸ea de ˆınalt˘a performant ¸ ˘aˆıntr-o
topologie fat-tree. Aceast ˘a configurat ¸ie activeaz ˘aˆımp˘art ¸irea m ˘arimii de band ˘aˆın vederea
scal˘arii liniare la num ˘arul de procesoare. ˆIn plus fat ¸ ˘a de paradigmele tradit ¸ionale de progra-
mare cu memorie distribuit ˘a, sistemul Altix implementeaz ˘a cache-coerent, protocol access
la memorie neuniform (NUMA) direct ˆın hardware. Acest lucru permite un model de pro-
gramare la care accesarea datelor remote se face la fel ca datele alocate local. Un cache
load/store nu reus ¸es ¸te s ˘a transmit ˘a date c ˘atre hardware (via the SHUB), s ¸i automat este re-
plicat ˆın cache-ul local, totus ¸i localizarea datelor ˆın memoria principal ˘a este f ˘acut˘a la nivel
3
Introducere Aplicat ¸ii s ¸tiint ¸ifice
de pagin ˘a.
Nume Linie Disciplina Metode Structura
LBMHD 1.500 Fizica plasmei Hidrodinamica- magnetic ˘a Lattice Boltzmann Grid
PARATEC 50.000 S ¸tiint ¸a materialelor Teoria fundamentala a densitatii FFT Fourier/Grid
CACTUS 84.000 Astrofizica Teoria lui Enstein Method of Lines Grid
Tabel 1: Rezumat al aplicat ¸iilor s ¸tint ¸ifice studiate ˆın acest studiu
Earth simulator
Vectorizarea exploateaz ˘a regularit ˘at ¸ile din structura computat ¸ional ˘a ale aplicat ¸iilor s ¸tiint ¸ifice
pentru trimiterea operat ¸iilor uniforme ca seturi de date independente. Procesorul 500 Mhz
ES cuprinde 8 metode de replicare vector pipe care emite un MADD la fiecare ciclu, la
o performant ¸ ˘a de 8.0 Gflop/s per CPU. Procesorul cuprinde 72 vectori ˆınregistrat ¸i, fiecare
p˘astrˆand 256 64-biti cuvinte (vector length = 256). Pentru instruct ¸iunile ne-vectorizabile, ES
cont ¸ine un procesor scalar de 500 Mhz cu 64 KB intructiuni cache, 64 KB cache de date s ¸i
128 pentru ˆınregistr ˘ari generale. Cele 4 moduri ale elementelor superscalare de 1.0 Gflop/s
(1/8 din performant ¸a unui vector) suport ˘a predict ¸ia ramurii, date preaduse. La fel ca arhitec-
turile vector tradit ¸ionale, elementul vector ES nu are cache, latent ¸a memoriei este mascat ˘a
de suprapunerea operat ¸iilor vectoriale cu cele de memorie. Pricipalul chip de memorie pen-
tru ES utilizeaz ˘a un DRAM special proiectat pentru viteze mari denumit FPLRAM (Full
Pipelined RAM).
X1
Nucleul computat ¸ional, denumit single-streaming processor (SSP), cont ¸ine dou ˘a 32-
stage vector pipes care ruleaz ˘a la 800 Mhz. Fiecare SSP cont ¸ine 32 vectori ˆınregistrat ¸i
care p ˘astreaz ˘a cuvinete cu precizia 64-double (lungimea vectorului = 64), s ¸i opereaz ˘a la
3.2 Gflop/s pentru 64-biti data. SSP-ul cont ¸ine de asemenea dou ˘a procesoare superscalare
care ruleaz ˘a la 400 Mhz cu dou ˘a cache de 16KB(intructiuni s ¸i date). Nodul X1 cuprinde
patru MSP-uri care ˆımpart doar o memorie, s ¸i configurarea sistemelor mari este introdus ˘a
ˆın ret ¸ea printr-un tor 2D interconenctat. Topologia torului permite scalabilitatea de a m ˘ari
num˘arul procesoarelor cu put ¸ine leg ˘aturi comparativ cu arborele mare sau cu leg ˘aturile cross-
bar, totus ¸i configurarea aceastei topologii sufer ˘a limitarea m ˘arimii de band ˘aˆımp˘art ¸ite. ˆIn cele
din urm ˘a, X1 are hardware care suport ˘a memorie adresat ˘a global care permite implement ˘ari
ale libr ˘ariilor transmise (MPI-2, SHMEM) s ¸i limbaje de programare paralele implicite (UPC,
CAF). Toate experimentele X1 relatate au fost realizate pe un sistem 512-MSP (reservat ˆın
mare parte pentru servicii de sistem) rul ˆand UNICOS/mp 2.4 s ¸i fiind operat de ORNL.
1.2 Aplicat ¸ii s ¸tiint ¸ifice
Trei aplicat ¸ii din arii diferite ale calcului s ¸tiint ¸ific au fost alese pentru a compara performant ¸a
sistemelor bazate pe vectori ES s ¸i X1 cu cele superscalare Power3, Power4, Altix. Aplicat ¸iile
4
Introducere Ce este calculul paralel
sunt LBMHD, o aplicat ¸ie a fizicii plasmei care utilizeaz ˘a metoda Lattice-Boltzmann ˆın
studiul megneto-hidrodinamicii; PARATEC, primul material s ¸tiint ¸ific cu cod care rezolv ˘a
ecuat ¸iile Kahn-Sham ale densit ˘at ¸ii teoriei funct ¸ionale ˆın vederea obt ¸inerii electronice a funct ¸iilor
de und ˘a; Cactus, cod astrofizic care implic ˘a ecuat ¸iile lui Einstein s ¸i Teoria general ˘a a rela-
tivit˘at ¸ii folosind metoda Arnowitt-Deser-Misner.Un rezumat al aplicat ¸iilor este prezentat ˆın
Tabelul 2.
Aceste coduri reprezint ˘a candidat ¸i la aplicat ¸iile ultrascalare care au potent ¸ialul s ˘a ulti-
lizeze complet sistemul Earth Simulator. Performant ¸ele care rezult ˘a, prezentate ˆın Gflops/s
per procesor (notate ca Gflops/P) s ¸i procentajul cel mai bun, sunt utilizate pentru a compara
timpul relativ pentru a obt ¸ine solut ¸ia folosind platformele computat ¸ionale din studiul nostru.
Cˆand sunt utilizate diferite abord ˘ari algoritmice pentru implement ˘arile scalare s ¸i vectoriale,
aceast ˘a valoare este calculat ˘a prin imp ˘art ¸irea unei baseline valide de num ˘ar de flopi la m ˘asura
timpului necesar fiec ˘arei arhitecturi.
Pentru a caracteriza nivelul de vectorizare, examin ˘am de asemenea vector operation ra-
tio(VOR) s ¸i average vector length (A VL) pentru ES s ¸i X1 unde acest lucru este posibil. VOR
m˘asoar ˘a raportul dintre num ˘arul operat ¸iilor vectoriale s ¸i num ˘arul total de operat ¸ii (vectoriale
s ¸i scalare), ˆın timp ce A VL reprezint ˘a num ˘arul de operat ¸ii efectuate de fiecare instruct ¸iune
vectorial ˘a. Un cod vectorizabil efectiv va reus ¸i at ˆat un VOR mare (optim este 100% s ¸i A VL
(256 s ¸i 64 este optim pentru ES respectiv X1). Counterul date hardware a fost obt ¸inut cu
hpmcount pe sistemele Power, pfmon pe Altix, ftrace pe ES s ¸i pat pe X1.
1.3 Ce este calculul paralel
Calculul paralel inseamn ˘a execut ¸ia simultan ˘a pe mai multe procesoare a aceloras ¸i instruct ¸iuni
cu scopul rezolv ˘arii mai rapide a unei probleme, subdivizat ˘a s ¸i special adaptat ˘a. Ideea de
baz˘a este aceea c ˘a problemele de rezolvat pot fi uneori imp ˘art ¸ite ˆın mai multe probleme mai
simple, de natur ˘a similar ˘a sau identic ˘aˆıntre ele, care pot fi rezolvate simultan. Rezultatul
problemei init ¸iale se afl ˘a apoi cu ajutorul unei anumite coordon ˘ari.
Sistemul de calcul paralel este un computer (calculator) cu mai multe procesoare care
lucreaz ˘aˆın paralel. Primele astfel de sisteme au fost supercomputerele. Noile procesoare de
tip multimiez pentru PC-uri sunt de asemenea sisteme de calcul paralel. Exist ˘a multe tipuri
5
Introducere Ce este calculul paralel
de sisteme de calcul paralel. Ele se deosebesc prin tipul de interconectare:
.ˆıntre procesoarele componente (cunoscute drept elemente de procesare sau PEs)
.ˆıntre procesoare s ¸i memorie.
Taxonomia lui Flynn clasific ˘a sistemele de calcul paralel (s ¸i serial), astfel:
.Single Instruction Multiple Data sau SIMD (instruct ¸iune simpl ˘a / date multiple): dac ˘a
toate procesoarele execut ˘aˆın toate momentele aceeas ¸i instruct ¸iune, dar av ˆand ca obiect
date diferite
.Multiple Instruction Multiple Data sau MIMD (instruct ¸iuni diferite / date multiple):
dac˘a fiecare procesor execut ˘a instruct ¸iuni diferite.
O alt ˘a clasificare a sistemelor de calcul paralel este bazat ˘a pe arhitectura memoriei:
1.Sistemele de calcul paralel cu memorie partajat ˘a: dispun de procesoare multiple care
acceseaz ˘a toat ˘a memoria disponibil ˘a ca un spat ¸iu de adrese global (pentru toate proce-
soarele). Acestea pot fi ˆımp˘art ¸ite ˆın dou ˘a mari clase, ˆın funct ¸ie de timpul de acces la
memorie:
.Acces uniform al memoriei (UMA), ˆın care timpii de acces la toate p ˘art ¸ile me-
moriei sunt egali.
.Acces neuniform al memoriei (NUMA), ˆın care timpii de acces la memorie nu
sunt egali.
2.Sistemele de calcul paralel cu memorie distribuit ˘a au de asemenea mai multe proce-
soare, dar fiecare procesor poate accesa doar memoria sa local ˘a. Nu exist ˘a nici un fel
de spat ¸iu de adrese global pentru toate procesoarele.
Sistemele de calcul paralel pot fi de asemenea clasificate dup ˘a num ˘arul de procesoare
din component ¸a lor. Sistemele cu mii de asemenea procesoare sunt cunoscute drept massi-
vely parallel. Urmeaz ˘a sistemele de calcul paralel la scar ˘a mare sau la scar ˘a mic ˘a. Aceasta
depinde s ¸i de viteza procesorului (de exemplu: un sistem de calcul paralel bazat pe un com-
puter personal va fi considerat ”la scar ˘a mic ˘a”).
Sistemele de calcul paralel mai pot fi ˆımp˘art ¸ite ˆın sisteme multiprocesor simetrice si
asimetrice, dup ˘a cum toate procesoarele sunt de acelas ¸i fel sau nu (de exemplu: dac ˘a doar
un procesor poate rula codul sistemului de operare s ¸i celelalte nu au acest privilegiu, atunci
sistemul este asimetric).
Algoritmii paraleli se construiesc reproiect ˆand algoritmii seriali astfel ca s ˘a foloseasc ˘a
resursele specifice ale sistemului de calcul paralel. Nu tot ¸i algoritmii seriali pot fi paralelizat ¸i.
O analogie exemplificativ ˘a: o femeie nas ¸te un copil ˆın decursul a nou ˘a luni, dar nou ˘a femei
nu pot nas ¸te un copil ˆın decurs de o lun ˘a.ˆIn practic ˘a este foarte dificil de obt ¸inut o m ˘arire
linear ˘a a vitezei de calcul, proport ¸ional ˘a cu num ˘arul de procesoare. Aceasta deoarece cei
mai mult ¸i algoritmi sunt prin natura lor secvent ¸iali. Unele probleme pot beneficia de pe urma
paralelismului de tip ” ˆın secvent ¸ ˘a” (pipeline ), atunci c ˆand sunt ad ˘augate noi procesoare. ˆIn
acest caz, pentru a sub ˆımp˘art ¸i problema se foloses ¸te abordarea de tip ”linie de asamblare”.
6
Introducere Ce este calculul paralel
Dac˘a problema poate fi ˆımp˘art ¸it˘aˆın n etape s ¸i un rezultat part ¸ial este pasat de la etap ˘a la
etap˘a, atunci pot fi folosite ˆın paralel tot n procesoare, dar cea mai ˆınceat ˘a etap ˘a le va fr ˆana pe
celelalte, s ¸i deci cele n procesoare se vor folosi doar rareori la capacitatea lor total ˘a teoretic ˘a
maxim ˘a.
7
Capitolul 2
Arhitecturi
2.1 Introducere
La ora actual ˘a, practic orice calcultator, inclusiv un PC normal, cont ¸ine elemete de para-
lelism. Aparit ¸ia lor a fost determinat ˘a de necesitatea cres ¸terii vitezei de calcul, prin alte
mijloace dec ˆat cres ¸terea frecvent ¸ei ceasului. Cel mai evident exemplu este cel al coproceso-
rului pentru PC-uri, care este specializat ˆın calcule cu virgula mobil ˘a, el lucreaz ˘aˆın paralel
cu procesorul, dar la comanda acestuia. Dac ˘a acum 10 ani coprocesorul era un circuit se-
parat, acum el este parte a procesorului. Paralelismul acesta se numes ¸te funct ¸ional , exist ˘a
unit˘at ¸i de calcul pentru diverse tipuri de operat ¸ii – unele pentru ˆıntregi, altele pentru numere
reale – care lucreaz ˘aˆın paralel. Astfel, procesorul poate execut ˘a mai multe instruct ¸iuni, sau
faze diferite (decodificare, citire/scriere operanzi, calcul efectiv) ale mai multor instruct ¸iuni,
ˆın acelas ¸i timp. Tosus ¸i, din punct de vedere al program ˘arii, un calculator secvent ¸ial are un
singur procesor.
La extrema cealalt ˘a se afl ˘a calculatoarele care au zeci, sute sau chiar mii de procesoare
identice, care pot executa un flux propriu de instruct ¸iuni, cooper ˆand la rezolvarea unei pro-
bleme. Astfel de calculatoare se numesc masiv paralele. Deoarece procesoarele sunt ele
ˆınsele extrem de puternice, un calculator “masiv paralel” este de sute/mii de ori mai rapid
decˆat calculatoarele secvent ¸iale din aceeas ¸i generat ¸ie.
Presupun ˆand c ˘a exist ˘a mai multe procese (taskuri, p ˘art ¸i din program, sau chiar pro-
grame) care trebuie s ˘a se execute, modul concurent implic ˘a numai o eventual ˘a senzat ¸ie de
paralelism, pentru c ˘a exist ˘a o singur ˘a unitate central ˘a, la ocuparea c ˘areia concureaz ˘a proce-
sele. Dac ˘a mecanismul dup ˘a care se permite alocarea unit ˘at ¸ii centrale este bun, procesele
pot p ˘area c ˘a se execut ˘aˆın paralel datorit ˘a vitezei mari de execut ¸ie. Este situat ¸ia ˆıntˆalnit˘a
ˆın cazul sistemelor de operare multitasking. O execut ¸ie cu adev ˘arat paralel ˘a a proceselor
se face folosind mai multe procesoare, ˆın cazul ideal unul pentru fiecare proces. ˆIn mul-
titasking, problemele dificile apar ˆın a face s ˘a coopereze mai multe procese ce utilizeaz ˘a
aceeas ¸i resurs ˘a;ˆın paralelism problema important ˘a e de a face un program (format din mai
multe procese care coopereaz ˘a) s˘a se execute pe mai multe procesoare. Aceste probleme
au destule puncte ˆın comun; de aceea de multe ori modurile de descriere paralel, respectiv
8
Arhitecturi Clasificarea arhitecturilor
concurent, sunt asem ˘an˘atoare; diferent ¸a esent ¸ial ˘a ap˘arˆandˆıns˘a la execut ¸ie.
2.2 Clasificarea arhitecturilor
Principalele categorii de arhitecturi sunt departajate prin dou ˘a criterii: al fluxului de instruc-
tiui s ¸i al fluxului de date. Conform acestei clasific ˘ari calculatoarele pot fi:
.SISD (Single Instruction Single Data): la un moment dat se execut ˘a o singur ˘a instruct ¸iune
asupra unei singure date; este calculatorul secvent ¸ial obis ¸nuit.
.SIMD (Single Instruction Multiple Data): la un moment dat se execut ˘a o singur ˘a
instruct ¸iune, dar asupra mai multor date; este un calculator paralel, ˆın care proce-
soarele execut ˘a sincron acelas ¸i program, dar fiecare asupra altui set de date.
.MIMD (Multiple Instruction Multiple Data): fiecare procesor execut ˘a un program pro-
priu, folosind date proprii.
.MISD (Multiple Instruction Single Date): o categorie deocamdat ˘a vid ˘a,ˆın care aceleas ¸i
date ar fi prelucrate simultan ˆın mod diferit, de c ˘atre mai multe procesoare.
Principalele categorii de calcultatoare paralele sunt: SIMD s ¸i MIMD.
Arhitecturi SIMD
Arhitecturi pipeline
Din punct de vedere istoric, primul tip de paralelism a fost cel pipeline, ˆın care prelucra-
rea datelor se face ca pe o band ˘a rulant ˘a, pe care exist ˘a mai multe posturi de lucru; la fiecare
dintre acestea se execut ˘a o operat ¸ie asupra produsului; la un moment dat pe band ˘a exist ˘a
atˆatea produse c ˆate posturi, ˆın diverse faze de execut ¸ie. As ¸adar, modul de prelucrare pipeline
este un caz particular de paralelism funct ¸ional. Ideea de baz ˘a este de a descompune operat ¸iile
ˆın cele mai mici p ˘art ¸i componente: de exemplu, pentru a aduna dou ˘a numere reprezentate ˆın
format virgul ˘a mobil ˘a, se parcurg secvent ¸ial urm ˘atoarele etape:
.Etapa1: compararea exponent ¸ilor;
.Etapa2: aducerea la acelas ¸i exponent cu num ˘arul mai mare a celui mai mic, a c ˘arui
parte zecimal ˘a (mantisa) se modific ˘a corespunz ˘ator;
.Etapa3: adunarea p ˘art ¸ilor zecimale (mantiselor);
.Etapa4: normalizarea rezultatului;
ˆIn figura al ˘aturat ˘a se observ ˘a prelucrarea datelor conform exemplului de mai sus. O
pereche de date Dk trebuie s ˘a parcurg ˘a etapele secvent ¸ial, dar pot exista patru perechi prelu-
crate la un moment dat; practic se execut ˘a aceeas ¸i operat ¸ie asupra mai multor date, dar prin
9
Arhitecturi Clasificarea arhitecturilor
suboperat ¸ii diferite.
O alt ˘a variant ˘a de arhitectur ˘a SIMD este cea prezentat ˘aˆın figura urm ˘atoare, aici fiind
vorba cu adev ˘arat de paralelism. Procesoarele Pi execut ˘a simultan aceeas ¸i instruct ¸iune, dic-
tat˘a de unitatea de comand ˘a (cea care det ¸ine programul). Operat ¸iile se execut ˘a asupra unor
date aflate ˆın memoriile locale Mi; acestea sunt de capacitate mic ˘a, dar rapide, s ¸i sunt alimen-
tate cu date de la o memorie extern ˘a. Uneori exist ˘a o ret ¸ea de interconectare ˆıntre procesoare
s ¸i memorii ( figurat ˘a printr-un dreptunghi cu linie ˆıntrerupt ˘a), astfel ˆıncˆat, la un moment dat,
un procesor poate accesa alte memorii, dar nu pot exista dou ˘a memorii accesate simultan de
acelas ¸i procesor. De exemplu, fiecare procesor acceseaz ˘a memoria vecinului s ˘au din dreapt ˘a.
Arhitecturile SIMD de tipul celor din figura al ˘aturat ˘a au fost foarte populare spre sf ˆars ¸itul
anilor ’80; exemple de astfel de arhitecturi sunt: calculatoarele Conection Machine 2, DAP,
MassPar MP-1, Zephir. Dup ˘a 1990, ele au devenit din ce ˆın ce mai put ¸in competitive, arhi-
tecturile MIMD dovedindu-se cu mult superioare.
Calculatoarele MIMD se ˆımpart dup ˘a modul de repartizare a memoriei ˆın dou ˘a mari catego-
rii: cu memorie partajat ˘a (comun ˘a) s ¸i cu memorie distribuit ˘a.ˆIn ambele cazuri vom presu-
pune c ˘a exist ˘a p procesoare, notate cu Pi ,i = 0…p – 1; vom numi i adres ˘a (sau identitatea)
procesorului; vom utiliza ˆın egal ˘a m˘asur˘a reprezent ˘arile zecimal ˘a s ¸i binar ˘a ale num ˘arului
10
Arhitecturi Clasificarea arhitecturilor
i. Fiecare procesor poate executa programul s ˘au propriu; aceasta nu ˆınseamn ˘a c˘a proce-
soarele au ˆıntotdeauna programe diferite; diferent ¸a esent ¸ial ˘a fat ¸˘a de arhitecturile SIMD este
c˘a execut ¸ia programelor nu se face sincron, ci independent pe fiecare procesor. MIMD cu
memorie partajat ˘a. La arhitectura cu memorie partajat ˘a, cum se poate observa ˆın figura
urm˘atoare, exista o memorie comun ˘a de dimenstiuni mari s ¸i, eventual, memorii locale (ne-
prezentate ˆın figur ˘a) de dimensiuni modeste dar mai rapide.
ˆIn urm ˘atoarea figur ˘a este reprezentat ˘a o configurat ¸ie cu un singur procesor s ¸i cu o astfel
de memorie, numit ˘a de obicei cache; ˆın cazul multiprocesor, accesul la memoria global ˘a este
coordonat de o unitate logic ˘a special ˘a, care are rolul de a arbitra conflictele ap ˘arute ˆın urma
mai multor cereri simultane de acces la memorie.
Principala problem ˘a a acestor arhitecturi este accesul la memoria comun ˘a; posibilele
conflicte produc ˆıntˆarzieri, ceea ce nu permite o bun ˘a eficient ¸ ˘a atunci c ˆand num ˘arul de pro-
cesoare este mare (peste c ˆateva zeci), adic ˘a cres ¸te posibilitatea aparit ¸iei conflictelor. Tehno-
logia actual ˘a permite realizarea unor calculatoare cu memorie comun ˘a performante cu cel
mult 32 de procesoare.
Se s ¸tie c ˘a viteza procesoarelor este mai mare (uneori semnificativ) dec ˆat cea a memori-
ilor. De aceea este natural ˘a utilizarea de c ˘atre un procesor a mai multor blocuri de memorie,
11
Arhitecturi Clasificarea arhitecturilor
la care s ˘a fac ˘a rˆand pe r ˆand cereri de citire/scriere, la fiecare pas c ˆate una. De exemplu,
dac˘a un bloc are nevoie de patru pas ¸i pentru a satisface cererea, atunci patru blocuri vor fi,
ˆın general, suficiente pentru a nu se obt ¸ine timpi mort ¸i ˆın funct ¸ionarea procesorului. Ori
ˆın arhitecturile MIMD cu memorie partajat ˘a pare a fi exact invers. ˆIn fapt nu e chiar as ¸a:
imensa memorie comun ˘a este ˆımp˘art ¸it˘aˆıntr-un num ˘ar relativ mare de blocuri accesibile in-
dependent; exist ˘a acea unitate funct ¸ional ˘a a calculatorului care gestioneaz ˘a cererile de acces
la memorie ale procesoarelor s ¸i care permite simultaneitatea, dar numai ˆın cazul accesului
la blocuri diferite; practic toate blocurile de memorie pot lucra ˆın paralel, reus ¸indu-se ali-
mentarea procesoarelor. ˆIn plus, memoriile cache permit mics ¸orarea traficului cu memoria
comun ˘a prin reutilizarea unor date depuse acolo, deci locale.
As ¸adar, accesul la memoria comun ˘a nu este secvent ¸ial. Esent ¸ial ˆın caracterizarea arhi-
tecturii r ˘amˆane faptul c ˘a fiecare procesor are acces la ˆıntreaga memorie. Printre calculatoa-
rele actuale cu memorie comun ˘a se num ˘ar˘a Sun 10000 Enterprise.
MIMD cu memorie distribuit ˘a -ˆIn arhitectura cu memorie distribuit ˘a, as ¸a cum se poate
observa ˆın figura urm ˘atoare, fiecare procesor Pi are o memorie local ˘a Mi (nu exist ˘a memorie
comun ˘a). Cooperarea procesoarelor se realizeaz ˘a prin intermediul leg ˘aturilor asigurate de
o ret ¸ea de interconectare, cu topologie fixat ˘a sau programabil ˘a. De altfel configurat ¸ia aces-
tei ret ¸ele este una dintre cele mai importante tr ˘as˘aturi ale unui astfel de calculator MIMD.
Fiecare procesor Pi execut ˘a un program propriu aflat ˆın Mi s ¸i prelucreaz ˘a date aflate tot ˆın
Mi.
Arhitecturi mixte.
Deoarece arhitecturile cu memorie comun ˘a sunt foarte eficiente pentru un num ˘ar mic de
procesoare, o tendint ¸ ˘a actual ˘a este de a realiza calculatoare ˆın care clustere de 4-8 procesoare
cu memorie comun ˘a sunt conectate printr-o ret ¸ea de comunicat ¸ie. Putem spune astfel c ˘aˆıntr-
un calculator cu memorie distribuit ˘a, procesoarele sunt ˆınlocuite cu asfel de clustere. Se
ˆımbin ˘a astfel calit ˘at ¸ile celor dou ˘a tipuri de calculatoare MIMD (cu memorie comun ˘a – adic ˘a
partajat ˘a – s ¸i cu memorie distribuit ˘a). Este interesant c ˘a modul de programare a acestor
arhitecturi mixte este tipic fie memoriei comune, fie celei distribuite, fie am ˆandurora (dar
nu s ¸i simultan). As ¸adar, nu s-a creat s ¸i un mod de programare specific arhitecturilor mixte.
Exemple de astfel de arhitecturi sunt calculatoarele : HP 9000 Superdome, SGI Origin 3000.
Accesul la un calculator paralel – O problem ˘a destul de delicat ˘a este modul de realizare
a leg ˘aturilor ˆıntre calculatoarele MIMD s ¸i exterior. De obicei aceasta se face prin intermediul
12
Arhitecturi Clasificarea arhitecturilor
unui calculator gazd ˘a, pe care utilizatorii lucreaz ˘aˆın regim de multitasking, adic ˘a pe acest
calculator se realizeaz ˘a preg ˘atirea programului, adic ˘a editarea s ¸i compilarea. Cum acest tip
de leg ˘atur˘a este lent, transmit ¸ ˆandu-se printr-un singur canal informat ¸ional programe s ¸i date
pentru mai multe procesoare, de c ˘atre un singur utilizator la un moment dat, tendint ¸a actual ˘a
este de a permite conectarea utilizatorilor direct la procesoare ale calculatorului paralel, pe
care se execut ˘a nucleul unui sistem de operare c ˘aruia ˆıi revine sarcina de a ocupa mai multe
procesoare la momentul execut ¸iei.
13
Capitolul 3
Instalare mediu MPI
3.1 Alegere distribut ¸ie Linux.Ubuntu
Ubuntu este un sistem de operare bazat pe linux, dezvoltat de comunitate, perfect pentru
calculatoarele portabile, de birou sau servere. Include toate aplicat ¸iile de care avet ¸i nevoie –
un navigator pentru Internet, programe pentru editarea documentelor, prezent ˘arilor s ¸i calcul
tabelar, mesagerie instant s ¸i multe altele. Ubuntu este un sistem de operare bazat pe Linux,
disponibil gratuit cu suport din partea comunit ˘at ¸ii c ˆat s ¸i suport profesional. Ubuntu este
potrivit pentru folosirea at ˆat pe sistemele desktop c ˆat s ¸i pe cele server. Versiunea curent ˘a de
Ubuntu suport ˘a arhitecturile Intel x86 (PC IBM-compatibil), AMD64 (Hammer) s ¸i PowerPC
(Apple iBook s ¸i Powerbook, G4 s ¸i G5).
Ubuntu include peste 16 000 pachete software, dar cele necesare pentru instalarea
de baz ˘a necesit ˘a mai put ¸in de un CD. Ubuntu ˆıncepe cu kernel-ul Linux versiunea 2.6 s ¸i
Gnome 2.16, s ¸i acoper ˘a orice aplicat ¸ie standard desktop ˆıncep ˆand de la un procesor de texte
s ¸i pˆan˘a la aplicat ¸ii pentru calcul tabelar sau aplicat ¸ii pentru accesarea Internet-ului, software
pentru server web, email, limbaje de programare s ¸i utilitare precum s ¸i c ˆateva jocuri. Xubuntu
este o derivat ˘a oficial ˘a a sistemului de operare Ubuntu ce foloses ¸te drept mediu de lucru
Xfce. Acesta a fost conceput pentru utilizatorii cu calculatoarele mai put ¸in performante, sau
pentru cei ce-s ¸i doresc un mediu de lucru eficient chiar s ¸i pe un sistem performant. Xubuntu
foloses ¸te ˆın principal aplicat ¸iile de Gnome.
Mediul de lucru Xubuntu
Odat ˘a ce-t ¸i pornes ¸ti sistemul pentru prima dat ˘a vei observa un mediu de lucru
simplu s ¸i clar, f ˘ar˘a iconit ¸e pe desktop, iar culorile sunt pl ˘acute la vedere.
Gata pentru utilizare
Odat ˘a instalat, Xubuntu este gata din acel moment pentru a fi utilizat. Sistemul
14
Instalare mediu MPI Instalare mediu de programare MPI
vine deja cu aplicat ¸iile de baz ˘a de care vei avea nevoie, aici enumer ˘am Abiword pentru
documente, Gnumeric pentru calcul tabelar, Firefox pentru navigare pe internet s ¸i Mozilla
Thunderbird drept client de pos ¸t ˘a electronic ˘a.
Cerint ¸e minimale pentru instalare Xubuntu
Xubuntu este disponibil pentru PC, PC pe 64-Bit ,i. CD-urile necesit ˘a 128MB RAM
pentru a fi rulate, sau 192MB RAM pentru a fi instalate. Instalarea mediului de lucru ˆın
totalitate necesit ˘a 1,5G de spat ,iu pe unitatea de stocare.
Pentru utilizatorii de Windows exist ˘a o solut ,ie foarte clar ˘a s,i simpl ˘a din punct de
vedere administrativ. Aceasta se numes ,te WUBI. Acest utilitar este simplu de utilizat din
toate punctele de vedere. Instalarea standard se face folosind internetul. Se poate instala
sistemul de operare offline cu condit ,ia de a copia executabilul wubi ˆın acelas ,i director ca
s,i imaginea iso a sistemului de operare Ubuntu. ˆIn figura de mai jos avet ,i un exemplu de
funct ,ionare ˆın Windows pentru prima instalare a Ubuntu :
3.2 Instalare mediu de programare MPI
ˆIn sistemul de operare Ubuntu modalitatea de instalare a pachetelor software se realizeaz ˘a
cu ajutorul comenzii apt-get (Advanced Packaging Tool).
Instalarea unui nou pachet presupune cunos ,tint ,a numelui acelui pachet.
Sistemul Ubuntu sugereaz ˘a anumite pachete de instalare ˆın momentul ˆın care se
15
Instalare mediu MPI Instalare mediu de programare MPI
tip˘ares ,te o comand ˘a.
Pentru instalarea openMpi este nevoie de urm ˘atoarea comand ˘a:sudo apt-get in-
stall openmpi-bin .
ˆIn figura de mai jos afis ,˘am un screenshot a modului de instalare al openMpi.
Pentru a instala openMpi este nevoie s ˘a folosim internetul. Dac ˘a nu suntem legat ,i
la internet atunci instalarea este un pic mai dificil ˘a. Urm ˘atorul pas ˆın instalarea pe calculator
a modulului de dezvoltare libopenmpi-dev necesar pentru scrierea programelor MPI.
ˆIn figura de mai jos este ilustrat efectul comenzii de instalare a acestui modul de
16
Instalare mediu MPI Instalare mediu de programare MPI
dezvoltare a aplicat ,iilor MPI.
Odat ˘a instalat acest modul de dezvoltare avem la dispozit ,ie o serie de comenzi spe-
cifice compil ˘arii s ,i execut ˘arii programelor MPI. Un program MPI este compilat cu ajutorul
unei comenzi mpicc.openmpi s ,i apoi executat cu ajutorul unei comenzi de tip mpirun.
Pentru executarea unui program ˆın paralel pe mai multe calculatoare este nevoie
de mai multe set ˘ari.ˆIn primul r ˆand este necesar a se s ,ti calculatoarele gazd ˘a pe care pro-
gramul scris ˆın MPI va fi executat. Prima comand ˘a care ne permite aflarea detaliilor despre
conexiunea la ret ,ea a calculatorului este ifconfig.
S˘a presupunem c ˘a avem un calculator care va fi master, iar celelalte calculatoare
din ret ,ea vor fi configurate slave pentru a executa programele lansate de pe calculatorul
master. Pentru aceasta este nevoie s ˘a modific ˘am fis ,ierul /etc/hosts cu ajutorul comenzii:
sudo pico /etc/hosts.
17
Instalare mediu MPI Executia unui program MPI
Forma acestui fis ,ier este:
ˆIn acest caz localhost reprezint ˘a calculatorul master care va lansa programele s ,i
host1 s ,i host2 sunt calculatoarele pe care se vor lansa num ˘arul de procese stabilit de comanda
mpirun.openmpi.
3.3 Executia unui program MPI
Comanda de compilare a unui fis ,ier specific scris ˆın MPI este similar ˘a comenzii de compilare
a unui fis ,ier C din sistemul de operare linux, ˆın cazul nostru, Xubuntu. S ˘a presupunem c ˘a
avem la dispozit ,ie fis ,ierul hello.c care implementeaz ˘a un algoritm simplu ˆın MPI. Comanda
este: mpicc –v -o hello hello.c. ˆIn urma execut ˘arii acestei comenzi cu ajutorul opt ,iunii –v
(verbose) se obt ,in rezultatele din figura de mai jos.
ˆIn urma acestei compil ˘ari se obt ,ine un fis ,ier executabil cu numele hello. Acest
fis,ier va fi executat folosind o comand ˘a de tip mpirun.openmpi. Pentru a executa fis ,ierul pe
18
Instalare mediu MPI Executia unui program MPI
mas ,inile slave e nevoie s ˘a copiem fis ,ierul executabil pe fiecare mas ,in˘a. Comanda de copiere
este: scp hello user1@172.16.1.172:hello unde am folosit adresa cu numere pentru host1.
ˆIn momentul acesta suntem gata s ˘a rul ˘am programul copiat pe celelalte mas ,ini
slave.
Comanda de executare are mai multe opt ,iuni. Lista de gazde a calculatoarelor fo-
losite este precedat ˘a de opt ,iunea –host iar –np reprezint ˘a num ˘arul de procese folosite pentru
rularea programului. mpirun.openmpi -np 10 –host localhost –host host1 ./hello
ˆIn urma execut ˘arii acestei comenzi, rezultatele sunt prezentate ˆın figura de mai jos.
Pentru a verifica rularea programului pe calculatorul gazd ˘a am realizat un scre-
enshot folosind top pe calculatorul host1. Pentru a vedea efectul rul ˘arii programului s ,i pe
cel˘alalt calculator am dat comanda: mpirun.openmpi -np 90 -host host1 ./hello cu 90 de
procese.
Din figura de mai sus se observ ˘a o serie de procese cu numele hello care au fost
19
Instalare mediu MPI Executia unui program MPI
pornite pe mas ,ina host1. Observ ˘am de asemenea programul orted care este the Open Run-
Time Environement-cadrul de rulare al programelor MPI pentru mas ,ina master. ˆIn urma
rul˘arii acestui program cu 90 de procese obt ,inem rezultatele din figura de mai jos.
20
Capitolul 4
Message Passing Interface
4.1 Introducere
MPI este un standard internat ,ional, care foloses ,te una dintre cele mai utilizate “paradigme”
din lumea sistemelor paralele s ,i distribuite: comunicat ,ia prin mesaje. El a fost creat ˆın
momentul ˆın care ”rivalul” sau PVM ( Parallel Virtual Machine ), standard ”de facto” de
altfel, era ˆın plin ˘a glorie, tocmai pentru a oferi avantajele unui standard. Spre deosebire
de PVM, exist ˘a mai multe implement ˘atri ale acestui standard ( mpich, lam, chimp s ,i chiar
winmpi ). Standardul a ajuns la versiunea 2.0, ˆıns˘a implement ˘arile sunt doar la versiunea
1.2. Varianta 2.0 a ap ˘arut pentru a corecta o serie de neajunsuri ale variantei 1.0, cea mai
important ˘a fiind imposibilitatea cre ˘arii dinamice de procese.
Pentru aplicat ,ii uzuale, MPI este la fel de us ,or de folosit ca orice alt sistem bazat
pe comunicat ,ia prin mesaje. V om folosi ca exemplu o variant ˘a a lui ”Hello world!” dar care
foloses ,te mai multe procese care trimit mesaje ”Hello” unui alt proces. ˆIn MPI, procesele
implicate ˆın execut ,ia un program paralel, sunt identificate prin numere iıntregi. Dac ˘a exist ˘a
p procese care formeaz ˘a un program, ele vor avea identificatorii 0, 1, … , p-1. ˆIn urm ˘atorul
program fiecare proces cu identificatorul diferit de 0 va trimite un mesaj procesului 0, care va
afis ,a mesajele primite. Astfel procesul 0 va fi un proces ”master” iar celelalte vor fi procese
”slave”.
4.2 Comenzi si funct ¸ii specifice MPI
Caˆın orice sistem, exist ˘a dou ˘a funct ,ii speciale, care permit unui proces normal s ˘a revendice,
respectiv s ˘a renunt ,e la statutul de proces MPI.
21
Message Passing Interface Comenzi si funct ¸ii specifice MPI
MPI Init( &argc, &argv );
MPI Finalize( );
O informat ,ie deosebit de util ˘a pentru un proces MPI este identificatorul cu care este
cunoscut ˆın sistem. De asemenea, un proces MPI trebuie s ˘a cunoasc ˘a num ˘arul de procese
existente ˆın sistem. Aflarea primei informat ,ii se face cu apelul MPI Comm rank():
int myrank;
MPI Comm rank( MPI COMM WORLD,&myrank );
Num ˘arul total de procese este dat de funct ,ia MPI Comm size( ): int nprocs;
MPI Comm size( MPI COMM WORLD, &nprocs );
Un mesaj MPI este un vector de elemente de un tip bine precizat. Tipurile valide
au denumirile prefixate de ”MPI ”. MPI cunoas ,te toate tipurile uzuale s ,i permite construirea
de tipuri complexe. Un mesaj este adresat unui proces identificat prin rangul s ˘au s ,i are atas ,at
un tip, precizat de utilizator. Acest tip permite diferent ,ierea ˆıntre mesajele pe care o aplicat ,ie
le-ar putea trimite sau primi ˆın timpul execut ,iei.ˆIn exemplul anterior existau dou ˘a tipuri de
mesaje, de lucru s ,i de terminare a lucrului.
MPI Send( buffer, count, datatype, destination, tag, MPI COMM WORLD );
Un proces trebuie s ˘a specifice tipul mesajului as ,teptat, precum s ,i sursa acestuia.
Se pot folosi constantele MPI ANY TAG s ,i MPI ANY SOURCE pentru a putea recept ,iona
orice tip de mesaj de la orice surs ˘a.
MPI Recv( buffer, maxcount, datatype, source, tag, MPI COMM WORLD, &sta-
tus );
Parametrul status cont ,ine informat ,ii despre mesajul recept ,ionat. Tipul mesajului
recept ,ionat este ˆın cˆampul status MPI TAG, iar identificatorul sursei este ˆın status.
MPI SOURCE. Pentru a afla num ˘arul de elemente recept ,ionate se foloses ,te funct ,ia:
MPI Getcount( &status, datatype, &nelements );
Funct ,ia se foloses ,te atunci c ˆand num ˘arul de elemente recept ,ionate poate fi mai mic
decˆat ”maxcount”. Datele schimbate ca mesaje pot avea diverse reprezent ˘ariˆıntr-un mediu
heterogen. De aceea trebuie s ˘a fie disponibil un mecanism prin care datele s ˘a fie transmise
f˘ar˘a nici un fel de probleme. MPI poate trimite date av ˆand o larg ˘a varietate de tipuri, de la
tipuri simple p ˆan˘a la structuri complexe.
Fuctille MPI care se ocup ˘a cu transferul de mesaje admit un parametru de tip
MPI Datatype pentru a preciza tipul datelor. De exemplu, pentru apelul de trimitere a unui
mesaj:
22
Message Passing Interface Comenzi si funct ¸ii specifice MPI
MPI Send( void* buf, int count, MPI Datatype datatype, int des ,t, int tag, MPI Comm
comm );
Cele mai utilizate tipuri sunt urm ˘atoarele:
Num ˘arul parametrilor precizat ¸i ˆın funct ¸ia MPI Send( ) se refer ˘a la num ˘arul de
elemente de un anumit tip, s ¸i nu la num ˘arul de octet ¸i.
Exist ˘a 4 funct ¸ii de comunicare de baz ˘a: MPI Send, MPI Recv (prezentate mai
sus) MPI Bcast, MPI Barrier s ¸i MPI Scatter / MPI Reduce. Aceste funct ¸ii sunt blocante,
adic˘a cˆat timp se trimit date ( MPI Send ) nu se poate recept ¸ion ˘a ( MPI Recv ), procesul
este suspendat. Exist ˘a s ¸i funct ¸ii neblocante, cele care ˆıncep cu liter ˘a I (MPI ISend) dar nu se
recomanda utilizarea lor deoarece sunt considerate nesigure. Funct ¸ia MPI Bcast (funct ¸ia de
broadcast) este folosit ˘a pentru a trimite date de la un process MPI la toate celelalte procese
MPI.
int MPI Bcast( void *buf, int cnt, MPI Datatype, int root, MPI Comm comm);
Unde buf este un pointer la bufferul din care procesul root trimite cnt elemente de
tipul datatype tuturor celorlalte procese.
Funct ¸ia MPI Barrier ( funct ¸ia de blocare ) este folosit ˘a pentru a sincroniza proce-
sele MPI. Funct ¸ia blocheaz ˘a toate procesele MPI definite ˆın comm.
int MPI Barrier( MPI Comm comm );
C. MPI Reduce este funct ¸ie de lucru colectiv. Se lucreaz ˘a cu mai multe procesoare
s ¸i se fac operat ¸ii de reducere:
23
Message Passing Interface Comenzi si funct ¸ii specifice MPI
int MPI Reduce( void *sendbuf, void *recbuf, int cnt, MPI DataType datatype,
MPI Op op, int root, MPI Comm comm );
Unde:
sendbuf – reprezint ˘a buferul de unde se trimite
recbuf – este buferul ˆın care se va depune rezultatul operat ¸iei op. Aceste dou ˘a
bufere trebuie s ˘a fie diferite altfel se genereaz ˘a eraore; cnt- reprezint ˘a num ˘arul de elemente
care realizeaz ˘a operat ¸ia op ( de tipul adun ˘arii unui vector, element cu element );
datatype – reprezint ˘a tipul de date asupra c ˘arora se face operat ¸ia op;
root – reprezint ˘a mas ¸ina pe care se va depune rezultatul operat ¸iei op;
comm – reprezint ˘a comunicatorul din care vor face parte mas ¸inile implicate ˆın
operat ¸ia op;
op- reprezint ˘a operat ¸ia care se efectueaz ˘a s ¸i paote fi una din operat ¸iile specificate
ˆın urm ˘atorul tabel, care sunt operat ¸ii predefinite sau se poate genera o operat ¸ie proprie.
ˆIn urm ˘atorul tabel definim operat ¸iile:
MPI Scatter este funct ¸ie de expediere a datelor de la un task la celelalte task-uri
din grup.
24
Message Passing Interface Comenzi si funct ¸ii specifice MPI
int MPI Scatter( void *sendbuf, int sendcnt, MPI Datatype sendtype, void *recv-
buf, int recvcnt, MPI Datatype recvtype, int root, MPI Comm comm );
Parametrii au urm ˘atoarea semnificat ¸ie:
sendbuf – address of send buffer (choice, significant only at root)
sendcount – number of elements sent to each process (integer, significant only at
root)
sendtype – data type of send buffer elements (significant only at root) (handle)
recvcount – number of elements in receive buffer (integer)
recvtype – data type of receive buffer elements (handle)
root rank – of sending process (integer)
comm – communicator (handle)
Cu ajutorul pachetului standard MPI nu poate fi transmis ˘a o stuctur ˘a, dar poate fi
construit ˘a o nou ˘a dat ˘a MPI. Acest lucru poate fi realizat cu ajutorul funct ¸iei:
int MPI Type struct( int cnt, int blocklen[], MPI Aint indices[], MPI Datatype
oldtypes[], MPI Datatype *newtype );
Unde:
cnt- reprezint ˘a num ˘arul de elemente de tipuri diferite pe care le cont ¸ine structura;
blocklen – reprezint ˘a num ˘arul de elemente de fiecare tip pe care le cont ¸ine struc-
tura;
indices – reprezint ˘a adresele elementelor structurii relativ la primul element al
structurii;
oldtypes – reprezint ˘a tipurile MPI ale elementelor structurii;
newtype – reprezint ˘a noua denumire a structurii pentru MPI.
Structura creat ˘a este init ¸ializat ˘a prin apelul funct ¸iei:
int MPI Type commit(MPI Datatype *newtype);
Structura poate fi distrus ˘a pentru a elibera memoria cu ajutorul funct ¸iei:
int MPI Type free(MPI Datatype *newtype);
Adresele elementelor structurii relativ la primul element, indices, se pot obt ¸ine cu
ajutorul funct ¸iei:
25
Message Passing Interface Comunicarea colectiv ˘aˆın MPI
int MPI Address( void *location,MPI Aint *address );
Unde:
location – este adresa variabilei din C;
address – este adresa variabilei MPI.
Dac˘a se dores ¸te transmiterea mai multor elemente diferite care nu fac parte dintr-o
structur ˘a este avantajos modul de transmitere ˆın bloc ( ˆımpachetare), deoarece nu se pierde
timp cu confirmarea pentru fiecare element iar transmisia nu mai este fragmentat ˘a. ”ˆImpachetarea”
se realizeaz ˘a cu funct ¸ia:
int MPI Pack( void *inbuf, int incnt, MPI Datatype datatype, void *outbuf, int
outcnt, int *pos, MPI Comm comm);
Iar operat ¸ia invers ˘a cu funct ¸ia:
int MPI Unpack(void *inbuf, int insize, int *pos, void *outbuf, int outcnt, MPI Datatype
datatype, MPI Comm comm);
Unde:
inbuf – reprezint ˘a buffer-ul de intrare;
outbuf – reprezint ˘a buffer-ul de ies ¸ire;
incnt – reprezint ˘a num ˘arul de elemente de ˆımpachetat;
insize – reprezint ˘a dimensiunea buffer-ului de intrare;
outcnt – reprezint ˘a num ˘arul de elemente care rezult ˘a dup ˘a despachetare;
datatype – reprezint ˘a tipul elementelor care se despacheteaz ˘a;
pos- reprezint ˘a pozit ¸ia curent ˘a (ˆın bytes);
comm – reprezint ˘a comunicatorul asupra c ˘aruia se face operat ¸ia.
4.3 Comunicarea colectiv ˘aˆın MPI
ˆIn prelucrarea paralel ˘a apar adesea situat ¸ii ˆın care comunicat ¸iile ”peer to peer” nu sunt su-
ficiente s ¸i trebuiesc g ˘asite solut ¸ii de comunicare colectiv ˘a. MPI pune la dispozit ¸ie c ˆateva
funct ¸ii rutine specializate s ¸i optimizate ˆın comunicat ¸iile colective prin folosirea c ˘arora se pot
obt ¸ine performant ¸e mult mai bune dec ˆat prin simpla trimitere a mesajelor.
26
Message Passing Interface Comunicarea colectiv ˘aˆın MPI
Exist ˘a trei tipuri de operat ¸ii colective:
1.Sincronizare
2.Transfer de date
3.Calcul colectiv – un membru al grupului colecteaz ˘a datele celorlalt ¸i membri s ¸i efectu-
aze diverse operat ¸ii asupra lor (min, max, add, multiply)
Caracteristici ale operat ¸iilor colective:
.Sunt blocante. Se termin ˘a imediat ce participarea procesului appelant este complet ˘a
deci nu se s ¸tie nimic despre celelalte procese dec ˆatˆın cazul operat ¸iilor de sincronizare.
.Nu pot fi amestecate cu funct ¸iile de comunicare p2p
.Cele mai multe funct ¸ii au dou ˘a variante:
standard: toate mesajele au aceeas ¸i dimensiune
vector: mesajele sunt vectori cu dimensiuni ce pot diferi.
.Pot fi folosite numai cu tipuri de date MPI predefinite (ex MPI INT), nu derivate .
.Pentru a putea fi aplicate pe subseturi ale unui grup trebuie de fapt repartit ¸ionat grupul
ˆın noi grupuri s ¸i comunicatori.
Operat ¸ii colective
MPI Barrier – Realizeaz ˘a o barier ˘a de sincronizare ˆıntr-un grup, apelul se blo-
cheaz ˘a pˆan˘a cˆand toate procesele dintr-un grup ajung la barier ˘a. Este singura funct ¸ie colec-
tiv˘a ce asigur ˘a sincronizare.
MPI Barrier (comm)
MPI Bcast – Trimite un mesaj de la procesul cu rank-ul ”root” c ˘atre toate celelalte
procese.
MPI Bcast (&buffer,count,datatype,root,comm)
MPI Gather – Adun ˘a mesaje distincte de la fiecare proces din grup ˆıntr-un singur
proces destinat ¸ie .
MPI Gather – (&sendbuf,sendcnt,sendtype,&recvbuf, …… recvcount,recvtype,root,comm)
.Argumentele ”receive” au sens numai pentru r ˘ad˘acin˘a
.Fiecare proces trebuie s ˘a trimit ˘a aceeas ¸i cantitate de date
.In procesul r ˘ad˘acin˘a se poate folosi MPI INPLACE ˆın loc de sendb
1.4. MPI Gatherv. Procesul ”root” primes ¸te c ˆate un vector diferit de la fiecare proces.
MPI Gatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm)
27
Message Passing Interface Comunicarea colectiv ˘aˆın MPI
.Varianta pentru vectori a lui MPI Gather.
.Primes ¸te o cantitate variabil ˘a de date de la fiecare proces.
.Permite procesului “root” s ˘a specifice unde se stocheaz ˘a dateele de la fiecare proces
.Orice element al recvbuf va fi scris o singur ˘a dat ˘a.
.MPI INPLACE poate fi folosit de c ˘atre “root”
Performant ¸a operat ¸iilor colective:
.Folosind rutinele colective se obt ¸in performant ¸e mult mai bune dec ˆat trimit ¸ ˆand doar
mesaje, toate av ˆand posibilitatea de a folosi mecanisme pentru ˆımbun ˘at˘at ¸irea comunicat ¸iilor
(ex: broadcast tree )
.Este important ˘a folosirea celor mai simple operat ¸ii colective care duc la rezultatele
dorite
.MPI INPLACE trbuie folosit c ˆand este posibil pentru c ˘a reduce memoria folosit ˘a s ¸i
transferul redundant de date.
#include <stdio.h>
int main( void )
{
printf("Hello World!");
}
28
Bibliografie
[1] G.Albeanu. Modelare s ¸i tehnci de programare ˆın realitatea virtual ˘a. In Conferint ¸a
Nat ¸ional ˘a de ˆInv˘at ¸˘amˆant Virtual , pages 33–38, 2005.
29
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Standarde MPI. Aplicat ii Open MPI [607211] (ID: 607211)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
