Sunteți pe pagina 1din 7

Universitatea Tehnic a Moldovei Catedra Automatic i Tehnologii Informaionale

Disciplina:PPC

AP! T "ucrare de la#orator $r%& Tema: Programarea prin transfer de mesa'e%

A efectuat : A verificat:

studentul grupei TI()*+ ,u'or -asile lector superior Cior# Dumitru

Chiinu .)+)

1 Scopul lucrrii
Paraleli/ara algoritmilor utili/0nd MPI%

2 Sarcina lucrrii
De facut un referat despre paraleli/area algoritmilor utili/0nd MPI%

3 Realizarea referatului
Message Passing Interface1MPI2 este standar descriind primitive de comunicaie 3 0n conte4tul unui model de programare 5PMD cu comunicaie prin mesa'e 3 aprut la mi'locul anilor 6)7 ca urmare al unui efort comun al cercetrilor din mediul academic i din industrie% "a ora actual7 MPI este disponi#il pe toate calculatoarele MIMD cu memorie distri#uit7 cu# form de #i#lioteci de rutine optimi/ate pe calculatoarele respective% 5crierea unui program folosind rutinele de comunicaie MPI asigur porta#ilitatea7 eficiena comunicaiei este garantat de implementrile performante disponi#ile ale rutinelor MPI% ! rutin MPI se e4ecut 0n cadrul unui grup de procesoare7 numit comunicator% Iniial e4ist un singur comunicator numit MPI8C!MM89! "D7 conin0nd toate procesoarele pe care se e4ecut programul% Pentru multe aplicaii7 acest comunicator este suficient7 e4ist rutine MPI care permit crearea dinamic a grupurilor de procesoare% :n cadrul unui comunicator procesoarele sunt numerotate de la ) la p(+ unde p este numarul de procesoare din comunicator% Un procesor poate afla numrul de procesoare din comunicator i adresa proprie 1numit rang 0n MPI2 apel0nd urmtoarele rutine: int MPI8Comm8si/e1MPI8Comm com7 int ;p2 int MPI8Comm8ran<1MPI8Comm com7 int ;m=8id2 :n am#ele rutine MPI8Comm este tipul predefinit pentru comunicatoare7 varia#ila com este comunicatorul 0n care se afl procesorul7 0n ca/ul cel mai general MPI8C!MM89! "D% :n varia#ila p si m=8id7 rutinele returnea/ valorile numrului de procesoare7 respectiv a adresei procesului apelant% Toate rutinele MPI 1care repre/int funcii C2 0ntorc un 0ntrg caracteri/0nd succesul e4ecuiei: MPI85UCC>5 0nseamn e4ecuie corect7 alte valori repre/int coduri de eroare predefinite% Structura unui program MPI. :ntroduc0nduse 0n modelul 5PMD7 un program MPI are forma o#inuit a unui program secvenial% respectiv dup orice alte rutine MPI%
Comunicaie standard Prin #uffer sincron #ocant MPI85end MPI8 ecv MPI8,send MPI85send non(#locant MPI8Isend MPI8Irecv MPI8I#send MPI8Isse#d

utinele MPI8Init i MPI8?inali/e tre#uie apelate 0nintea7 i

Aceasta este singura constr0ngere 0n rest programatorul este li#er sa foloseasca rutinele MPI

potrivit algoritmului pe care 0l implementea/% Rutinele de comunicaie. :n modelul MPI7 oricare . persoane 0i pot transmite mesa'e% Aadar topologia virtual este graful complet conectat% Calea pe care o parcurge efectiv mesa'ul este transparent pentru utili/ator% Principalele rutine de comunicaie sunt MPI85end i MPI8 ecv a cror sinta4 complet este urmtoarea: MPI85end1void ;mes7 int lung7 MPI8Datat=pe tipdate7 int dest7 int eticheta7 MPI8Comm com2 MPI8 ecv1void ;mes7 int lung7 MPI8Datat=pe tipdate7 int sursa7 int eticheta7 MPI8Comm com7 MPI85tatus ;stare2 "a e4ecuia MPI85end de ctre un procesor7 mesa'ul aflat 0n memoria local la adresa mes7 de lungime lung i av0nd tipul tipdate 1MPI are identificatori predefinii pentru practic toate tipurile u/uale de date7 alte tipuri se pot construi cu rutine speciale2 este transmis procesorului dest% Mesa'ului i este asociat o etichet1tag27 care 0l personali/ea/% Transmisia mesa'ului se face 0n cadrul comunicatorului com7 care tre#uie s conin i procesorul surs7 i cel de destinaie% Argumentele rutinei MPI8 ecv au semnificaii similare7 cu urmtoarele o#servaii: la e4ecuie7 se recepionea/ un mesa' de lungime cel mult lung7 trunchiind eventual mesa'ul transmis@ tipul de date poate diferi de la surs i destinaie7 0n plus dup recepie varia#ila stare d informaii suplimentare despre mesa'ul primit7 ca de e4emplu lungimea efectiv a mesa'ului% Moduri de comunicaie. MPI prevede rutinele pentru toate tipurile de comunicaie specificate mai sus: ma refer la comunicaia #locant7 non(#locant7 precum i la modurile de transmisie prin #uffer7 respectiv sincron% Tre#uie de su#liniat c modul de implementare a rutinelor de #a/ 1standart2 MPI85end7 MPI8 ecv nu este preci/at7 de e4emplu este posi#il ca mesa'ele scurte s fie transmise prin #uffer7 iar cele lungi sincron% Pentru comunicaia non(#locant7 rutina MPI89ait ateapt teminarea transmisiei sau reccepia7iar MPI8Test verific daca transmisia sau recepia s(au terminat sau nu% :n continuare voi pre/anta . e4emple de programe MPI implement0nd . operaii simple de comunicaie pe inel: + va fi transmiterea unui mesa' de ctre procesorul P ) vecinilor sai P+ i Pp(+% Al . operaie este transmiterea unui mesa' de catre fiecare procesor vecinilor sai% :n urmatorul e4emlu voi pre/enta un model MPI pentru operaia: procesorul P ) transmite un mesa' procesoarelor P+ i Pn(+% Ainclude Bstdio%hC Ainclude Bmpi%hC void main1int argc7 char ;;argv2 D int m=8id7p@ MPI85tatus stare@ char mesa'E+))F@ MPI8Init1Gargc7Gargv2 HHinitiali/are MPI

MPI8Comm8ran<1MPI8C!MM89! "D7 Gm=8id2@ HHafla adresa proprie MPI8Comm8si/e1MPI8C!MM89! "D7 Gp2@ HHafla numarul de proceoare if1pBI2 D if1m=8idJJ)2 HHdoar proc% ) afisea/a mesa' eraore prinf1K5unt necesare cel putin I procesoareLMnK2@ e4it1)2@ N if1m=8idJJ)2 HHproc% ) transmite mesa'ul D sprintf1mesa'7Kmesa' de la OdK7m=8id2@ MPI85end1mesa'7strlen1mesa'2P+7MPI8CQA 7+7667MPI8C!MM89! "D2@ MPI85end1mesa'7strlen1mesa'2P+7MPI8CQA 7p(+7667MPI8C!MM89! "D2@ printf1KOd: am trimis: OsMnK7m=8id7mesa'2@ N else if1m=8idJJ+RRm=8idJJp(+2 HHproc%+ si p(+ receptionate D MPI8 cev1mesa'7S)7MPI8CQA 7)7667MPI8C!MM89! "D7Gstare2@ printf1KOd: am primit: OsMnK7m=8id7mesa'2@ N MPI8finale/e12@ HHTerminare MPI N :n programul de mai sus lungimea mesa'ului este aleas astfel 0nc0t s fie transmis i /eroul de terminare a unui ir de caractere7 astfel procesoarele care recepionea/ pot afia mesa'ul fr a ti e4act lungimea lui% Un e4emplu cu T procesoare:

Ainclude Bstdio%hC Ainclude Bmpi%hC void main1int argc7 char ;;argv2 D int m=8id7p7dreapta7stinga@ MPI85tatus stare@ char msendE+))F7recvE+))F7#ufferE+))F@ MPI8Init1Gargc7Gargv2 HHinitiali/are MPI MPI8Comm8ran<1MPI8C!MM89! "D7 Gm=8id2@ HHafla adresa proprie MPI8Comm8si/e1MPI8C!MM89! "D7 Gp2@ HHafla numarul de proceoare dreapta J 1m=8idP+2Op@ stinga J 1m=8id(+Pp2Op@ sprintf1msend7Kmesa' de la OdK7m=8id2@ MPI8,uffer8attach1#uffer7+)))2@ MPI8,send1msend7strlen1msend2P+7MPI8CQA 7dreapta7667MPI8C!MM89! "D2@ MPI8 ecv1mrecv7+))7MPI8CQA 7stinga7667MPI8C!MM89! "D7Gstare2@ printf1KOd: am primit: OsMnK7m=8id7mrecv2@

MPI8finale/e12@ N

HHTerminare MPI

:n programul de mai sus este pre/entat o alt operaie a modelului MPI: fiecare procesor transmite cite un mesa' procesorului din dreapta sa7 pe un inel% De o#servat folosirea transmiterii prin #uffer7 care garantea/ corectitudinea programului%

Concluzie
:n urma reali/rii lucrrii de la#orator am studiat mai amnunit MPI7 care este un standart descriind primitive de comunicaie% ?olosind rutinele MPI putem asigura programului un mod mai sigur de porta#ilitate7 eficiena comunicaiei este garantat de implementrile performante disponi#ile ale rutinelor MPI% MPI prevede rutine pentru toate tipurile de comunicaie: #locant7 non(#locant7 precum i la modurile de transmisie prin #uffer7 respectiv sincron%

Bibliografie 1 ttp!""###.$c ur.pub.ro"do#nload. tm 2 ttp!""###.google.md"url%$a&t'$ource&#eb'cd&1(')ed&(C*g+,-./'url& ttp03. 02,02,funinf.c$.unibuc.ro02,1g eorg e02,cur$02,met2ez)Soft02,lec 02,l(3four.pdf'rct&-'4&paralelizarea02(algoritmilor02(utilizand 02(MPI'ei&B4567c89*M8B:+Pi:r3;Bg'u$g&.,+-C<=l1f:t329In z2tP>tPB?; l>Bb3+'cad&r-a