08.03.2015 Views

Ceo rad - PDF (1.3 MB)

Ceo rad - PDF (1.3 MB)

Ceo rad - PDF (1.3 MB)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Dodatak D Karakteristike MPI standarda 175<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

Pri neblokirajućem prijemu poruke mogu poslužiti funkcije<br />

MPI_Wait(prequest, status) i MPI_Test(prequest, flag, status). Prva zaustavlja<br />

izvršavanje sve dok zahtev prequest za prijemom poruke koja je u toku, ne<br />

bude završen. Druga testira kako teče prijem date poruke i koliko je elemenata<br />

već primljeno.<br />

MPI_Get_elements(status, datatype, count) vraća koliko je elemenata count<br />

primljeno nekom neblokirajućom komandom prijema poruke tipa datatype u tom<br />

trenutku. Pri tome se čita promenljiva status. Slična je funkciji MPI_Get_count(),<br />

sa time što za razliku od nje vraća broj primeljenih elemenata, a ne broj<br />

primljenih blokova.<br />

D.2.4 Kolektivne komunikacije<br />

MPI_Bcast(buffer, count, type, root, comm) šalje poruku od procesa sa<br />

rangom root do svih ostalih procesa u grupi. Svi argumenti moraju biti isti za sve<br />

procese.<br />

MPI_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,<br />

root, comm) prosleđuje poruke od svakog procesa ka root procesu. On prima<br />

sve poruke i smešta ih u poretku rangova. Za procese različite od root vrednost<br />

recvbuf se ignoriše. Promenljive sendbuf i sendcount označavaju bafer za<br />

slanje za sve procese, a recvbuf i recvcount prijemni bafer procesa root, i<br />

moraju da budu isti. Nasuprot tome, parametri sendtype i recvtype mogu i da se<br />

razlikuju. Funkcija MPI_Gatherv() je vrlo slična, samo poruke koje se primaju od<br />

svakog procesa ne moraju biti iste dužine<br />

MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,<br />

root, comm) je inverzna operacija od MPI_Gather i šalje sendcount elemenata<br />

iz sendbuf bafera svakom od procesa. Tip podataka za slanje je sendtype a<br />

svaki od procesa prima recvcount elemenata tipa recvtype. Parametri root i<br />

comm moraju imati iste vrednosti za sve procese. Funkcija MPI_Scatterv() je<br />

vrlo slična, samo poruke koje se šalju svakom od procesa ne moraju biti iste<br />

dužine.<br />

U nekim slučajevima je potrebno sinhronizovati <strong>rad</strong> procesora u paralelnom<br />

programu. Jedan od načina za sinhronizaciju je funkcija MPI_Barrier(comm)<br />

koja blokira tekući proces sve dok svi članovi grupe ne pozovu datu funkciju, i<br />

tek tada procesi u datoj grupi nastavljaju izvršavanje.<br />

D.2.5 Globalno izračunavanje<br />

Kao što smo već napomenuli MPI standard omogućuje globalno<br />

izračunavanje za sve procese u datoj grupi. Pri tome svaki proces poseduje<br />

neke skalarne ili vektorske veličine, koje su argumenti date operacije, a rezultat<br />

se prosleđuje nekom od procesa ili svim procesima.<br />

MPI_Reduce(sendbuf, recvbuf, count, datatype, op, root, comm) kombinuje<br />

elemente date u sendbuf svakog procesa u grupi operacijom op i izračunatu<br />

vrednost vraća u recvbuf bafer procesa u datoj grupi sa rangom root. Ako<br />

sendbuf sadrži više članova (vektorski podaci) tada se operacija primenjuje na<br />

svaki od njih pojedinačno.<br />

MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, comm) na isti način<br />

globalno izračunava vrednosti, ali ih prosleđuje svim procesima u datoj grupi.<br />

Na sličan način MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype,<br />

op, comm) vrši operaciju po elementima vektora na sendbuf memorijskoj lokaciji

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!