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