Sunteți pe pagina 1din 12

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

Laborator nr. 3 Introducere n MPI (2)

an univ. 2013 2014

Tipuri de date n MPI

Trebuie observat faptul c a, pentru ecare comunicat ie n parte, lungimea mesajului este specicat a n num ar de elemente, nu n num ar de octet i. Tipurile de date de baz a corespund tipurilor de date de baz a ale limbajului folosit. Astfel avem: Tabelul 1: Tipuri de date primare n MPI MPI Datatype MPI CHAR MPI SHORT MPI INT MPI LONG MPI UNSIGNED CHAR MPI UNSIGNED SHORT MPI UNSIGNED MPI FLOAT MPI DOUBLE MPI LONG DOUBLE MPI BYTE MPI PACKED C datatype signed char signed short int signed int signed long int unsigned char unsigned short int unsigned int oat double long double

Comunicat ii colective

Conceptul cheie al comunicat iilor colective este acela de a avea un grup de procese participante. Pentru aceasta biblioteca MPI ofer a urm atoarele funct ii: bariera sincronizarea prin barier a pentru tot ii membrii grupului (MPI Barrier); broadcast transmiterea de la un membru al grupului c atre ceilalt i membri (MPI Bcast); gather adunarea datelor de la tot i membrii grupului la un singur membru din grup (MPI Gather); scatter mpr as tierea datelor de la un membru la tot i membrii grupului (MPI Scatter); all gather o variat ie a MPI Gather n care tot i membrii grupului primesc rezultatele (MPI Allgather); all-to-all scatter/gather adunarea/ mpras tierea datelor de la tot i membrii grupului c atre tot i membrii (MPI Alltoall o extensie a MPI Allgather n care ecare proces trimite date distincte c atre ecare preces din grup); operat ii de reducere adunare, nmult ire, min, max, sau funct ii denite de utilizator n care rezultatele sunt trimise la tot i membrii grupului sau numai la un membru.

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

Observat ie: Toate funct iile sunt executate colectiv (sunt apelate de toate procesele dintr-un comunicator); toate procesele folosesc aceias i parametri n apeluri. schimb avem un comunicator ca argument. Funct iile nu au un identicator de grup ca argument explicit. In Incep and cu standardul MPI 2.0, comunicat iile colective accept a ca parametru un inter-comunicator. Caracteristicile comunicat iilor colective: Comunicat iile colective s i cele de tip individuale nu se vor inuent a reciproc. Toate procesele trebuie s a execute comunicat iile colective. Sincronizarea nu este garantat a, except ie fac and doar bariera. Nu exist a comunicat ii colective neblocante. Nu exist a tag-uri. Bufferele de recept ie trebuie sa e exact de dimensiunea potrivit a.

2.1

Bariera

Bariera este un mecanism de sincronizare a unui grup de procese. Dac a un proces a realizat un apel c atre MPI_Barrier(com), unde com este comunicatorul, atunci el va as tepta p an a c and toate procesele au efectuat acest apel. Apelul funct iei Barrier: MPI_BARRIER(comm) Prototipul funct iei este:
1 i n t M P I B a r r i e r ( MPI Comm comm )

Listing 1: Prototipul funct iei MPI Barrier (C)

2.2

Broadcast

Funct ia MPI Bcast trimite un mesaj de la procesul cu rangul root c atre toate procesele din grup, inclusiv procesului root. Schematic, acest comportament este prezentat n Figura 1.

Figura 1: Operat ia colectiv a Broadcast Funct ia este apelat a de tot i membrii grupului care folosesc acelas i argument pentru comunicator s i, respectiv, acelas i rang pentru procesul root. La ies irea din funct ie, cont inutul buffer-ului de comunicat ie al procesului root a fost transferat c atre toate procesele. Apelul funct iei Bcast este: 2

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

MPI_Bcast(buffer, count, datatype, root, comm) unde: INOUT buffer adresa de nceput a buffer-ului pentru date IN count num arul de intr ari din buffer IN datatype tipul datelor din buffer IN root rangul procesului root care init iaz a comunicat ia IN comm comunicatorul pe care se va realiza comunicat ia efectiv a. Prototipul funct iei este detaliat n Listing 2. In continuare, n Listing 3 este evident iat un exemplu de utilizare.
1 i n t MPI Bcast ( void b u f f e r , i n t count , MPI Datatype d a t a t y p e , 2 i n t r o o t , MPI Comm comm )

Listing 2: Prototipul funct iei MPI Bcast (C)

1 2 3 4 5 6 7 8 9 10 11

// . . . . . . . d o u b l e param ; M P I I n i t (& a r g c , &a r g v ) ; MPI Comm rank (MPI COMM WORLD,& r a n k ) ; i f ( r a n k ==5) { param = 2 3 . 0 ; } M P I B c a s t (& param , 1 , MPI DOUBLE , 5 ,MPI COMM WORLD ) ; p r i n t f ( P:%d dupa b r o a d c a s t p a r a m e t r u l e s t e %f \ n , r a n k , param ) ; MPI Finalize ( ) ; // . . . . . . . .

Listing 3: Utilizare MPI Bcast (C)

2.3

Scatter

Procesul root mparte s i trimite cont inutul sendbuffer-ului c atre toate procesele din grup (inclusiv c atre procesul root). Schematic, acest lucru este reprezentat n Figura 2 s i n Figura 3.

Figura 2: Operat ia colectiv a Scatter

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

Figura 3: Comportamentul operat iei colective Scatter Acelas i rezultat s-ar obt ine dac a procesul root ar realiza n operat ii de tip send (unde n reprezint a num arul total de procese ce apart in de grupul curent de lucru) MPI_Send(sendbuf+i*sendcount*extent(sendtype), sendcount, sendtype, i,...) s i ecare proces execut a o operat ie receive MPI_Recv(recvbuf, recvcount, recvtype, i,...). Apelul funct iei Scatter: MPI_SCATTER(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) unde: IN sendbuf adresa de nceput a buffer-ului cu datele pentru trimitere IN sendcount num arul de intr ari din buffer ce va trimis la ecare proces IN sendtype tipul datelor din buffer OUT recvbuf adresa de nceput a bufferului de recept ie IN recvcount num arul de intr ari ce vor primite de ecare proces IN recvtype tipul datelor din bufferul de recept ie IN root rangul procesului ce trimite datele IN comm comunicatorul pe care se va realiza comunicat ia efectiv a. Prototipul funct iei este expus n Listing 4.
1 MPI Scatter ( void sendbuf , i n t sendcount , MPI Datatype sendtype , 2 void recvbuf , i n t recvcount , MPI Datatype recvtype , 3 i n t r o o t , MPI Comm comm )

Listing 4: Prototipul funct iei MPI Scatter (C)

Observat ii: 1. Toate argumentele funct iei sunt semnicative numai n procesul root, n timp ce pentru celelalte procese numai argumentele recvbuf, recvcount, recvtype, root s i comm sunt semnicative. 2. sendbuffer, sendcound s i sendtype sunt ignorate n procesele care nu au rangul root. 4

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

In Listing 5 este prezentat un exemplu de utilizare a funct iei MPI Scatter.


1 2 3 4 5 6 7 8 9 10 // . . . . . . . MPI Comm comm ; int gsize , sendbuf ; int root , rbuf [100]; // ... MPI Comm size ( comm , &g s i z e ) ; s e n d b u f = ( i n t ) m a l l o c ( g s i z e 100 s i z e o f ( i n t ) ) ; // ... M P I S c a t t e r ( s e n d b u f , 1 0 0 , MPI INT , r b u f , 1 0 0 , MPI INT , r o o t , comm ) ; // . . . . . . .

Listing 5: Utilizare MPI Scatter (C)

2.4

Gather

Fiecare proces (inclusiv procesul root) trimite cont inutul sendbuffer-ului c atre procesul root. Procesul root primes te mesajele s i le stocheaz a n ordinea rangului. Conceptual, acest lucru este exemplicat n Figurile 4 s i 5.

Figura 4: Operat ia colectiv a Gather

Figura 5: Comportamentul operat iei colective Gather Acelas i rezultat s-ar obt ine dac a toate procesele (inclusiv procesul root) ar realiza c ate o operat ie de tip send MPI_Send(sendbuf, sendcount, sendtype, root,...) s i procesul root execut a n operat ii de tip receive (unde n reprezint a num arul total de procese ce apart in de grupul curent de lucru)

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

MPI_Recv(recvbuf+i*recvcount*extent(recvtype), recvcount, recvtype, i ,...). Apelul funct iei Gather: MPI_GATHER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) unde: IN sendbuf adresa de nceput a zonei buffer-ului de date IN sendcount num arul de elemente din buffer IN sendtype tipul datelor din buffer OUT recvbuf adresa buffer-ului de recept ie (are semnicat ie numai pentru procesul root) IN recvcount num arul de elemente pentru ecare recept ie n parte (are semnicat ie numai pentru procesul root) IN recvtype tipul datelor din buffer-ul de recept ie (are semnicat ie numai pentru procesul root) IN root rangul proceselor care recept ioneaz a datele IN comm comunicatorul pe care se va realiza comunicat ia efectiv a. Prototipul funct iei este urm atorul:
1 i n t MPI Gather ( void sendbuf , i n t sendcount , MPI Datatype sendtype , 2 void recvbuf , i n t recvcount , MPI Datatype recvtype , 3 i n t r o o t , MPI Comm comm )

Listing 6: Prototipul funct iei MPI Gather (C)

Observat ii: 1. Buffer-ul de recept ie este ignorat pentru procesele care nu au rangul root. 2. Argumentul recvcount la procesul root indic a dimensiunea datelor primite de la ecare proces s i nu num arul total de date primite. Listing-urile 7 s i 8 exemplic a utilizarea corect a a funct iei Gather.
1 2 3 4 5 6 7 8 9 // . . . . . . . MPI Comm comm ; int gsize , sendarray [100]; int root , rbuf ; // ... MPI Comm size ( comm , &g s i z e ) ; r b u f = ( i n t ) m a l l o c ( g s i z e 100 s i z e o f ( i n t ) ) ; M P I G a t h e r ( s e n d a r r a y , 1 0 0 , MPI INT , r b u f , 1 0 0 , MPI INT , r o o t , comm ) ; // . . . . . . .

Listing 7: Utilizare MPI Gather (C) (1)

1 2 3 4 5

// . . . . . . . MPI Comm comm ; int gsize , sendarray [100]; i n t r o o t , myrank , r b u f ; // ...

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

6 7 8 9 10 11 12

MPI Comm rank ( comm , &myrank ) ; i f ( myrank == r o o t ) { MPI Comm size ( comm , &g s i z e ) ; r b u f = ( i n t ) m a l l o c ( g s i z e 100 s i z e o f ( i n t ) ) ; } M P I G a t h e r ( s e n d a r r a y , 1 0 0 , MPI INT , r b u f , 1 0 0 , MPI INT , r o o t , comm ) ; // . . . . . . .

Listing 8: Utilizare MPI Gather (C) (2)

Topologii de comunicare n MPI

O topologie ofer a un mecanism convenabil pentru denumirea proceselor dintr-un grup, s i n plus, poate oferi solut ii sistemului, n timpul rul arii, pentru maparea proceselor pe hardware-ul existent. Un grup de procese n MPI reprezint a o colect ie de n procese. Fiecare proces din grup are atribuit un rang (valoare ntreag a) ntre 0 s i n-1. In multe aplicat ii paralele o atribuire liniar a a acestor ranguri nu reect a logica modelului de comunicat ii necesar. Adesea rangurile proceselor sunt aranjate n topologii, precum o plas a cu 2 sau 3 dimensiuni. Mai general, logica aranj arii proceselor este descris a de un graf. In continuare, aceast a aranjare logic a a proceselor o vom numi: ,,topologie virtual a. Trebuie f acut a distinct ie ntre topologia virtual a a proceselor s i topologia zic a (hardware). Descrierea topologiilor virtuale depinde numai de aplicat ie s i este independent a de mas in a. Structura comunicat iilor pentru un set de procese poate reprezenta un graf, n care nodurile reprezint a procesele iar muchiile conecteaz a procesele care comunic a ntre ele. MPI asigur a transmiterea mesajelor ntre oricare dintre perechile de procese din grup. Nu este nevoie ca un canal de comunicat ie s a e deschis explicit. De aceea, o muchie lips a n graful de procese denit de utilizator nu asigur a faptul c a procesele care nu sunt conectate nu fac schimb mesaje. Informat iile legate de topologie sunt asociate comunicatorilor. Astfel, urm atoarele informat ii legate de structura topologiei pot obt inute prin interogarea comunicatorului: 1. Tipul topologiei (cartezian a, graf sau nedenit a) 2. Pentru o topologie cartezian a: (a) ndims (num arul de dimensiuni), (b) dims (num arul de procese pe direct ia de coordonate), (c) periods (periodicitatea informat iei), (d) own position (pozit ia din topologia creat a) 3. Pentru o topologie de tip graf: (a) index, (b) muchii (reprezint a vectori ce denesc structura grafului). Ca s i pentru alte apeluri de funct ii colective, programul trebuie scris astfel nc at s a funct ioneze corect indiferent dac a apelurile se sincronizeaz a sau nu.

3.1

Topologii carteziene

Funct ia MPI_CART_CREATE poate folosit a pentru a descrie structuri carteziene de dimensiune arbitrar a. Pentru ecare coordonat a se poate specica dac a structura este periodic a sau nu. De exemplu, o topologie 1D, este liniar a dac a nu este periodic as i este un inel dac a este periodic a. Pentru o topologie 2D, avem un dreptunghi, un cilindru sau un tor dup a cum o dimensiune este sau nu periodic a. Observat ie: Un hipercub cu n dimensiuni este un tor cu n dimensiuni cu c ate 2 procese pe ecare coordonat a. De aceea nu este necesar un suport special pentru o structur a de hipercub. 7

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

Apelul funct iei MPI Cart create: MPI_CART_CREATE(comm_old, ndims, dims, periods, reorder, comm_cart) unde: a topologia nou a IN comm old comunicatorul peste care va creat IN ndims num arul de dimensiuni ale topologiei carteziene IN dims tablou de ntregi de dimensiune ndims care specic a num arul de procese de pe ecare dimensiune IN periods tablou de dimensiune ndims care specic a dac a ,,grila este periodic a (true) sau nu (false) pe ecare dimensiune IN reorder rangurile pot reordonate (true) sau nu (false) OUT comm cart comunicator cu noua topologie cartezian a. Prototipul funct iei este urm atorul:
1 i n t M P I C a r t c r e a t e ( MPI Comm comm old , i n t ndims , i n t dims , 2 i n t p e r i o d s , i n t r e o r d e r , MPI Comm c o m m c a r t )

Listing 9: Prototipul funct iei MPI Cart create (C) Pentru topologiile carteziene, funct ia MPI_DIMS_CREATE ajut a utilizatorul s a realizeze o distribuire echilibrat a a proceselor pe ecare direct ie de coordonate. O posibilitate ar mp art irea tuturor proceselor ntr-o topologie ndimensional a. Apelul funct iei MPI Dims create: MPI_DIMS_CREATE(nnodes, ndims, dims) unde: IN nnodes num arul de noduri din gril a IN ndims num arul de dimensiuni ale topologiei INOUT dims tablou de ntregi caare specic a num arul de noduri pe ecare dimensiune Prototipul funct iei este urm atorul:
1 i n t M P I D i m s c r e a t e ( i n t nnodes , i n t ndims , i n t dims )

Listing 10: Prototipul funct iei MPI Dims create (C) Pentru ecare dims[i] setat de apelul funct iei MPI_DIMS_CREATE, dims[i] va ordonat descresc ator. Tabloul dims este potrivit pentru a utilizat ca intrare n apelul funct iei MPI_CART_CREATE. Un exemplu de rezultat oferit de funct ia MPI_Dims_create poate observat n Tabelul 2. Tabelul 2: MPI Dims create scenarii de utilizare dims ( nainte de apel) (0, 0) (0, 0) (0, 3, 0) (0, 3, 0) parametrii de apel MPI DIMS CREATE(6, 2, dims) MPI DIMS CREATE(7, 2, dims) MPI DIMS CREATE(6, 3, dims) MPI DIMS CREATE(7, 3, dims) dims (dup a apel) (3, 2) (7, 1) (2, 3, 1) apel eronat

Odat a topologia stablit a, aceasta poate interogat a pentru a obt ine diferite informat ii. Aarea dimensiunilor un topologii carteziene: 8

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

MPI_CARTDIM_GET(comm, ndims) unde: IN comm comunicator cu structura cartezian a OUT ndims num arul de dimensiuni al structurii carteziene Prototipul funct iei este urm atorul:
1 int M P I C a r t d i m g e t ( MPI Comm comm , i n t ndims )

Listing 11: Prototipul funct iei MPI Cartdim get (C) Aarea rank-ului unui proces mapat la un anumit set de coordonate: MPI_CART_RANK (comm, coords, rank) unde: IN comm comunicator cu structura cartezian a IN coords tablou de ntregi care specic a coordonatele carteziene ale unui proces OUT rank ragul procesului specicat Prototipul funct iei este urm atorul:
1 i n t M P I C a r t r a n k ( MPI Comm comm , i n t c o o r d s , i n t r a n k )

Listing 12: Prototipul funct iei MPI Cart rank (C) Pentru un grup de procese cu o structur a cartezian a, funct ia MPI_CART_RANK transform a coordonatele logice ale procesului n rangul procesului. Aarea informat iilor despre topologia cartezian a curent a: MPI_CART_GET(comm, maxdims, dims, periods, coords) unde: IN comm comunicator cu structura cartezian a IN maxdims lungimea vectorilor dims, periods, s i coords n program OUT dims num arul de procese pe ecare dimesiune cartezian a OUT periods periodicitatea (true/ false) pentru ecare dimesiune OUT coords coordonatele procesului care apleaz a funct ia in structura cartezian a Prototipul funct iei este urm atorul:
1 i n t M P I C a r t g e t ( MPI Comm comm , i n t maxdims , i n t dims , i n t p e r i o d s , 2 int coords )

Listing 13: Prototipul funct iei MPI Cart get (C) Aarea coordonatelor unui anumit proces: MPI_CART_COORDS(comm, rank, maxdims, coords)

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

unde: IN comm comunicator cu structur a cartezian a IN rank rank-ul procesului pentru care se dores te aarea coordonatelor IN maxdims lungimea vectorului dims OUT coords vector de ies ire ce cont ine coordonatele rank-ului indicat Prototipul funt iei este urm atorul:
1 i n t M P I C a r t c o o r d s ( MPI Comm comm , i n t r a n k , i n t maxdims , i n t c o o r d s )

Listing 14: Prototipul funct iei MPI Cart coords (C) Listingul 15 prezint a un model de utilizare a metodelor descrise anterior (crearea unei topologii carteziene, interogare coordonate rank, interogare rank la coordonate).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 # i n c l u d e < s t d i o . h> # include mpi . h v o i d main ( i n t a r g c , char a r g v [ ] ) { int rank ; MPI Comm vu ; i n t dim [ 2 ] , p e r i o d [ 2 ] , r e o r d e r ; i n t coord [ 2 ] , id ; M P I I n i t (& a r g c , &a r g v ) ; MPI Comm rank (MPI COMM WORLD,& r a n k ) ; dim [ 0 ] = 4 ; dim [ 1 ] = 3 ; p e r i o d [ 0 ] =TRUE ; p e r i o d [ 1 ] = FALSE ; r e o r d e r =TRUE ; M P I C a r t c r e a t e (MPI COMM WORLD, 2 , dim , p e r i o d , r e o r d e r , &vu ) ; i f ( r a n k ==5) { M P I C a r t c o o r d s ( vu , r a n k , 2 , c o o r d ) ; p r i n t f ( P:%d My c o o r d i n a t e s a r e %d %d \ n r a n k , c o o r d [ 0 ] , } i f ( r a n k ==0) { coord [0]=3; coord [1]=1; M P I C a r t r a n k ( vu , c o o r d , &i d ) ; p r i n t f ( The p r o c e s s o r a t p o s i t i o n (%d , %d ) h a s r a n k%d \ n , coord [ 0 ] , coord [ 1 ] , id ) ; } MPI Finalize ( ) ; return 0; }

Listing 15: Creare unui topologiie carteziene s i exemple de interog ari (C)

3.2

Topologiile de tip graf

Crearea unei topologii de tip graf: MPI_GRAPH_CREATE(comm_old, nnodes, index, edges, reorder, comm_graph) unde: 10

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

IN comm old comunicator de intrare IN nnodes num arul de noduri din graf IN index tablou de ntregi care descriu nodurile IN edges tablou de ntregi care descriu muchiile grafului IN reorder rangurile pot ordonate sau nu OUT comm graph comunicator cu topologia grafului Prototipul funct iei este urm atorul:
1 i n t M P I G r a p h c r e a t e ( MPI Comm comm old , i n t nnodes , i n t i n d e x , 2 i n t e d g e s , i n t r e o r d e r , MPI Comm comm graph )

Listing 16: Prototipul funct iei MPI Graph create (C) Pentru exemplicare, consider am urm atorul graf: Tabelul 3: Exemplu de graf proces 0 1 2 3 vecini 1, 3 0 3 0, 2

In acest caz, argumentele nnodes, index s i edges corespunz atoare vor : nnodes=4 index={2,3,4,6} edges={1,3,0,3,0,2} Pentru o structur a de tip graf, num arul de noduri este egal cu num arul de procese din grup. De aceea num arul nodurilor nu trebuie memorat separat. Funct iile MPI_GRAPHDIMS_GET s i MPI_GRAPH_GET primesc informat ii privind topologia grafului care a fost asociat cu un comunicator de c atre funct ia MPI_GRAPH_CREATE. Informat iile furnizate de MPI_GRAPHDIMS_GET pot utilizate pentru dimensionarea corect a a vectorilor index s i edges pentru a realiza un apel MPI_GRAPH_GET. MPI_GRAPHDIMS_GET(comm, nnodes, nedges) unde: IN comm comunicator cu grupul care are structura de graf OUT nnodes num arul de noduri din graf (acelas i cu num arul proceselor din grup) OUT nedges num arul de muchii din graf Prototipul funct iei este urm atorul:
1 i n t M P I G r a p h d i m s g e t ( MPI Comm comm , i n t nnodes , i n t n e d g e s )

Listing 17: Prototipul funct iei MPI Graphdims get (C)

11

Universitatea Tehnic a ,,Gheorghe Asachi din Ias i Facultatea de Automatic as i Calculatoare

Dept.: Calculatoare s i Tehnologia Informat iei an IV Studii universitare de licent a Algoritmi Paraleli s i Distribuit i

MPI_GRAPH_GET(comm, nnodes, nedges) unde: IN comm comunicator cu structura grafului IN maxindex lungimea vectorului index n programul apelant IN maxedges lungimera vectorului edges n programul apelant OUT index tablou de ntregi ce cont ine structura grafului OUT edges tablou de ntregi ce cont ine structura grafului Prototipul funct iei este urm atorul:
1 i n t M P I G r a p h g e t ( MPI Comm comm , i n t maxindex , i n t maxedges , 2 i n t index , i n t edges )

Listing 18: Prototipul funct iei MPI Graph get (C) Funct iile MPI_GRAPH_NEIGHBORS_COUNT s i MPI_GRAPH_NEIGHBORS furnizeaz a informat ii suplimentare pentru o topologie de tip graf. MPI_GRAPH_NEIGHBORS_COUNT(comm, rank, nneighbors) unde: IN comm comunicator cu topologia grafului IN rank rangul procesului din grupul comm OUT nneighbors num arul de vecini ai procesului specicat Prototipul funct iei este urm atorul:
1 i n t M P I G r a p h n e i g h b o r s c o u n t ( MPI Comm comm , i n t r a n k , i n t n n e i g h b o r s )

Listing 19: Prototipul funct iei MPI Graph neighbors count (C)

MPI_GRAPH_NEIGHBORS(comm, rank, maxneighbors, neighbors) unde: IN comm comunicator cu topologia grafului IN rank rangul procesului din grupul comm IN maxneighbors dimensiunea tabloului ce va stoca rangurile vecinilor OUT neighbors rangurile proceselor care au ca vecini procesul specicat Prototipul funct iei este urm atorul:
1 i n t M P I G r a p h n e i g h b o r s ( MPI Comm comm , i n t r a n k , i n t m a x n e i g h b o r s , 2 int neighbors )

Listing 20: Prototipul funct iei MPI Graph neighbors (C)

12