Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Dodatak D Karakteristike MPI standarda 173<br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
MPI_Finalize(void) je poslednja MPI funkcija u programu, i posle nje nije<br />
moguće korišćenje MPI funkcija, čak ni MPI_Init(). Korisnik mora da bude<br />
siguran da su sve komunikacije gotove pre nego što se pozove MPI_Finalize().<br />
MPI_Initialized(flag) određuje da li je MPI_Init() već ranije pozvana, ili ne, što<br />
se vidi iz vrednosti parametra flag.<br />
MPI_Abort(comm, errorcode) prekida sve procese u grupi komunikatora<br />
comm, a MPI_Comm_free(comm) markira komunikator comm za oslobađanje<br />
(dealokaciju). Posle oslobađanja pokazivaču se dodeljuje vrednost<br />
MPI_COMM_NULL, a fizički se oslobađa tak kada nema aktivnih referenci na<br />
njega. Primenjuje se i na lokalne i na globalne komunikatore.<br />
MPI_Comm_size(comm, size) parametrom size vraća broj procesa u<br />
komunikatoru comm.<br />
MPI_Comm_rank(comm, rank) parametrom rank vraća indeks (rang)<br />
tekućeg procesa u komunikatoru comm.<br />
MPI_COMM_WORLD predstavlja početni komunikator obezbeđen od samog<br />
MPI sistema koji sadrži sve procese, i dozvoljava proizvoljnu komunikaciju<br />
između njih. Broj procesa tokom <strong>rad</strong>a MPI programa ostaje konstantan, i<br />
unapred je zadat konfiguracionom datotekom.<br />
D.2.2 Korisnički tipovi podataka za komunikaciju<br />
Za međuprocesorsku komunikaciju se osim osnovnih tipova podataka, mogu<br />
se koristiti i tipovi koje je definisao korisnik.<br />
Posle definisanja, a pre samog korišćenja novog korisničkog tipa potrebno<br />
ga je ozvaničiti (committed), funkcijom MPI_Type_commit(datatype). Posle toga<br />
je spreman za upotrebu u komunikaciji. I pre kao i posle ozvaničavanja novog<br />
tipa moguće ga je koristiti pri pravljenju novih tipova. Osnovne tipove nije<br />
potrebno ozvaničavati.<br />
MPI_Type_free(datatype) oslobađa objekat datatype i dodeljuje mu vrednost<br />
MPI_DATATYPE_NULL. Svaka komunikacija koja koristi dati tip će biti<br />
normalno završena. Izvedeni tipovi datog tipa će ostati sačuvani.<br />
Neke od osnovnih informacija o korisničkim tipovima su adresa početka<br />
odnosno kraja objekta datog tipa (bottom), njegova dužina (size) i struktura<br />
podataka unutar njega (extent). Prva se može dobiti preko MPI_BOTTOM,<br />
MPI_Type_lb(datatype, lbound) ili MPI_Type_ub(datatype, ubound). Veličina<br />
datog objekta izražena u bajtovima može se dobiti preko funkcije<br />
MPI_Type_size(datatype, size), a struktura podataka unutar korisničkog tipa<br />
pomoću MPI_Type_extent(datatype, extent). Pomoću funkcije<br />
MPI_Address(location, address) se može na osnovu lokacije u memoriji naći<br />
odgovarajuća MPI adresa.<br />
Funkcija MPI_Type_contiguous(count, old_type, new_type) pravi novi tip<br />
new_type kopiranjem i spajanjem count tipova old_type. Dužina svake kopije je<br />
određena sa strukturom podataka unutar starog tipa (extent).<br />
MPI_Type_vector(count, blocklen, stride, old_type, new_type) pravi novi tip<br />
spajanjem count*blocklen delova tipa old_type, sa razmakom stride elemenata<br />
između glavnih delova. MPI_Type_hvector() <strong>rad</strong>i isto samo je razmak stride u<br />
bajtovima.<br />
MPI_Type_struct(count, blocklens, inds, old_types, new_type) pravi<br />
složeniju strukturu od count postojećih tipova. Broj kopija svakog od tipova u