30
Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 1 Uvod v MPI – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil -Poglavje 8 – PP -http://www-unix.mcs.anl.gov/mpi/

Uvod v MPI – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

  • Upload
    darin

  • View
    44

  • Download
    2

Embed Size (px)

DESCRIPTION

Uvod v MPI – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil. Poglavje 8 – PP http://www-unix.mcs.anl.gov/mpi/. Preostala poglavja. Vzroki za nastanek Model prenosa sporočil Začetki in razvoj MPI , trenutno stanje Dodatne informacije o MPI , instalacija - PowerPoint PPT Presentation

Citation preview

Page 1: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 1

Uvod v MPI – 2. delVzporedno programiranje s programsko

knjižnico za prenos sporočil

-Poglavje 8 – PP-http://www-unix.mcs.anl.gov/mpi/

Page 2: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 2

Preostala poglavja

• Vzroki za nastanek

– Model prenosa sporočil

– Začetki in razvoj MPI, trenutno stanje

– Dodatne informacije o MPI, instalacija

• Osnove MPI

– Hello, World!

– Osnovni koncepti

– Enostavni primeri

• Komunikacija vozlišče-vozlišče

• Kolektivna komunikacija

• Primer vzporednega programa za izračun števila Pi

• Primer izpitnih obrazcev

Page 3: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 3

• Ne blokirajoča: program se lahko vrne iz klicane komunikacijske funkcije preden se prenos podatkov zaključi in preden lahko uporabnik varno uporabi (ponovno) prenosne vire, kot npr. pomnilniški vmesnik za sporočilo, ki je bil specificiran v klicu.

• Blokirajoča: program čaka v funkciji, da se leta izvede. Šele ko se program vrne iz komunikacijske rutine, se viri lahko varno ponovno uporabijo.

Tipi komunikacije - 1

Page 4: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 4

• Lokalna: zaključek klica je odvisen le od lokalnega procesa, na primer ne blokirajoča oddaja.

• Ne lokalna: zaključek klica je odvisen od izvedbe MPI funkcije v oddaljenem procesu, na primer blokirajoči sprejem bo čakal toliko časa, da bo sporočilo na oddaljenem viru oddano in lokalno sprejeto.

• Vozlišče-vozlišče: ko v komunikaciji sodelujeta le dva procesa, na primer, ko eden odda drugi pa sprejme sporočilo.

• Skupinska: ko sodeluje več procesov pri komunikaciji, in mora to skupinsko funkcijo izvesti več procesov, na primer eden-vsem.

Tipi komunikacije - 2

Page 5: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 5

Komunikacijski modeli

• Sinhroni način MPI_SSEND se ne konča preden se ne začne sprejem sporočila.

• Z vmesnim pomnilnikom (buffered) način MPI_BSEND ponudi dovolj pomnilnika, da “unsafe” programi postanejo varni.

• Način pripravljenosti (ready) MPI_RSEND garantira da je bilo sporočilo dostavljeno v celoti.

• Ne-blokirajoča komunikacija: MPI_ISEND, MPI_IBSEND, MPI_IRSEND, se vrne takoj po klicu.

• Pri tem lahko MPI_RECV sprejme sporočilo, ki je bilo odposlano na katerikoli način.

Page 6: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 6

MPI-jeve ne blokirajoče komunikacije• Ne blokirajoča komunikacija se takoj vrne iz funkcije in ponudi

kazalec (request handles) s katerim lahko testiramo trenutno stanje oddaje:

MPI_ISEND(buf, count, datatype, dest, tag, comm, request)

MPI_IRECV(buf, count, datatype, source, tag, comm, request)

• Lahko čakamo, da se lahko oddajni pomnilniški vmesnik spet

uporabi:

MPI_WAIT(request, status)

• ali pa testiramo stanje oddaje:

MPI_TEST( request, flag, status)

Page 7: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 7

MPI-jeve ne blokirajoče komunikacije

• Ne blokirajoča oddaja MPI_ISEND, ki ji takoj sledi čakanje MPI_WAIT je funkcionalno ekvivalentna blokirajoči oddaji MPI_SEND.

• Kako izvedemo čakanje na končanje več funkcij (master/slave program, ko master proces čaka na sporočila od več slave procesov)?

MPI_WAITALL(count, array_of_requests, array_of_statuses)

MPI_WAITSOME( count, requests, ndone, indices, statuses)

Page 8: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 8

MPI-jeve ne blokirajoče komunikacije

• Če ne uporabljamo oddaje s pomnilniškim vmesnikom, lahko program čaka na končanje oddaje sporočila (problem, če so dolga sporočila in lahko tudi, če imamo mnogo kratkih sporočil).

• Če bi lahko procesor med tem izvajal koristno računanje, lahko zelo skrajšamo izvajanje celotnega programa (prekrivanje komunikacije in računanja). Za uspešno izvedbo takega programa so potrebne izkušnje in testiranje časa izvajanja (meritve).

Page 9: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 9

Nedoločenost zaporedja sporočil

• MPI funkcije oddaje in sprejema ne zagotavljajo določenosti zaporedja: na primer, vrstni red dospelih poročil iz dveh različnih virov, procesa A in B, v procesu C, ki sprejema, ni določen oz. vnaprej znan.

• Uporabnik mora sam zagotoviti, da bo njegov program pravilno deloval in se ne bo zanašal na vrstni red sporočil. Če je vrstni red sporočil potreben, ga je treba zagotoviti s programom. Na primer, sprejeti obe sporočili in jih uporabiti po zahtevanem vrstnem redu.

Page 10: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 10

Prehitevanje in pravičnost v MPI

• MPI komunikacija je:

– Brez prehitevanja:

Če pošiljatelj pošlje dve sporočili istemu sprejemniku, bo sprejemnik prejel ti poročili v enakem vrstnem redu kot jih je oddajnik oddal.

– Nepravična:

Ne glede na to koliko časa mora nek proces oddaje čakati na izvedbo, ker je npr. komunikacijski vmesnik zaseden), vedno ga lahko prehiti nek drug proces, ki je čakal veliko manj.

Page 11: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 11

Osnovne skupinske komunikacije v MPI - MPI_ BARRIER

• Funkcije skupinske komunikacije morajo klicati vsi udeleženi procesi skupine, ki je določena s komunikatorjem comm.

MPI_BARRIER (comm)

• To funkcijo uporabimo za skupinsko časovno uskladitev (sinhronizacijo) izvajanja procesov v skupini, določeni s comm.

• Vsi procesi čakajo, da se funkcija izvede v vseh preostalih procesih in se vrnejo iz funkcije, ko so prejeli potrditev od vseh preostalih procesov.

Page 12: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 12

Osnovne skupinske komunikacije v MPI - MPI_ BARRIER

MPI_BARRIER (comm)

• Klic funkcije v vseh procesih je ekvivalenten pošiljanju praznega sporočila vsakemu vsem preostalim procesom ter sprejemanju size-1 sporočil v vsakem procesu (od vseh preostalih).

• To lahko izvedemo, npr. s klici funkcij MPI_SENDRECV iz vsakega procesa za vseh preostalih size-1 procesov:

MPI_SENDRECV(sbuf, 0, stype, 0, stag, rbuf, 0, rtype, 1, rtag, comm, status);

MPI_SENDRECV(sbuf, 0, stype, 0, stag, rbuf, 0, rtype, 2, rtag, comm, status);

….

Page 13: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 13

Osnovne skupinske komunikacije v MPI - MPI_ BARRIER

MPI_BARRIER (comm)

• Programer mora zagotoviti, da bodo vsi procesi zares poklicali funkcijo MPI_BARRIER, ker bo sicer program blokiral.

• Barrier (zapreka) je enostaven način za prehod iz ene faze računanja v drugo. Z njo zagotovimo, da se morebitna sporočila iz prve faze ne vmešavajo v izvajanje programa iz naslednje faze.

• Toda ekspliciten klic te funkcije ni zaželen, ker je časovno potraten. Bolje je uporabljati značke (tags), naslove izvorov (sources) in skupin (contexts), tako da sploh ne pride do neželenih (neznanih) sporočil.

Page 14: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 14

Osnovne skupinske komunikacije v MPI - MPI_BCAST

MPI_BCAST(inoutbuf, cnt, type, root, comm)

• Funkcija izvede komunikacijo eden-vsem, s tem, da le eden - korenski (root) - proces pošlje enake podatke vsem preostalim procesom size-1 v skupini, določeni s comm (ekvivalentno size-1 krat MPI_SEND(sbuf, cnt, type, pID, tag, comm)).

• Vsi od preostalih procesov tudi pokličejo to funkcijo in z njo sprejmejo od root procesa sporočilo, opredeljeno v funkciji (ekvivalentno

MPI_RECV(rbuf, cnt, type, root, tag, comm).

Page 15: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 15

Osnovne skupinske komunikacije v MPI - MPI_BCAST

MPI_BCAST(inoutbuf, cnt, type, root, comm)

• Ko se klic začne izvajati, je sporočilo shranjeno v vmesniku inoutbuf v root procesu in je sestavljeno iz cnt podatkovnih enot tipa, določenega s type.

• Ko je funkcija končana v vseh procesih, je sporočilo multiplicirano v inoutbuf vseh preostalih procesov.

Page 16: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 16

Osnovne skupinske komunikacije v MPI - MPI_BCAST

• MPI_BCAST(inoutbuf, cnt, type, root, comm)

• Ker je inoutbuf uporabljen kot vhodni (IN) parameter v root procesu in kot izhodni (OUT) parameter v vseh ostalih, ga označimo s tipom INOUT.

Page 17: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 17

Osnovne skupinske komunikacije v MPI - MPI_GATHER, MPI_SCATTER

• MPI_GATHER(sendbuf, sendcnt, sendtype,

recvbuf, recvcnt, recvtype, root, comm)

proces root zbere enako dolga sporočila incnt iz vseh procesov v skupini comm (tudi od sebe) in jih shrani na začetnem naslovu recvbuf, v zaporedju procesnih ID-jev in z dolžino size* recvcnt. Prvi trije parametri so relevantni za oddajo za vse procese, drugi trije pa za sprejem samo na root procesu.

• Rezultat je ekvivalenten kot da bi size procesov izvršilo: MPI_SEND (sendbuf, sendcount, sendtype, root, tag, comm)

root pa bi izvedel size klicev: MPI_RECV (recvbuf+pID*recvcnt*size(recvtype), recvcnt,

recvtype, pID, tag, comm, status)

Page 18: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 18

Osnovne skupinske komunikacije v MPI - MPI_GATHER, MPI_SCATTER

• MPI_SCATTER(inbuf, incnt, intype, outbuf, outcnt, outtype, root, comm)

razdeli sestavljeno sporočilo iz root procesa vsem ostalim procesom, tako, da ga razdeli na size enakih delov, in vsakega od delov pošlje po zaporedju ID-jev vsem preostalim procesom (vključno sebi).

Page 19: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 19

Osnovne skupinske komunikacije v MPI - MPI_REDUCE, MPI_ALLREDUCE

• MPI_REDUCE(inbuf, outbuf, count, type, op, root, comm)

Funkcija na procesu root sprejme podatke iz vseh procesov v skupini comm in jih kombinira z enostavno računsko ali logično operacijo op. Proces z rankom root vrne rezultat v vmesniku outbuf.

• Število in tip podatkov morata biti v vseh procesih enaka.

• MPI_ALLREDUCE(inbuf, outbuf, count, type, op, comm)

je vzporedna izvedba MPI_REDUCE v vseh procesih. Vsi uporabijo enake parametre, torej bodo imeli na konci vsi enak rezultat.

Page 20: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 20

Osnovne skupinske komunikacije v MPI - MPI_ALLREDUCE

• MPI_ALLREDUCE(inbuf, outbuf, count, type, op)

bi lahko izvedli tudi z:

MPI_REDUCE(inbuf, outbuf, count, type, op, root, comm)

MPI_BCAST(outbuf, count, type, root, comm)

• V mnogih numeričnih algoritmih, npr. pri računanju z vektorji in matrikami, lahko pare SEND/RECV zamenjamo s pari BCAST/REDUCE, s čimer povečamo učinkovitost in preglednost programa.

Page 21: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 21

MPI_REDUCE, MPI_ALLREDUCE

Page 22: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 22

Osnovne skupinske komunikacije v MPI - MPI_ALLREDUCE

• MPI_REDUCE(inbuf, outbuf, count, type, op, root, comm)

• MPI_ALLREDUCE(inbuf, outbuf, count, type, op)

• Možne že vgrajene računsko/logične operacije so:– Maksimum in minimum (MPI_MAX in MPI_MIN); – Vsota in produkt (MPI_SUM in MPI_PROD); – Logični IN, ALI, ekskluzivni ALI ( MPI_LAND, MPI_LOR, in

MPI_LXOR); – Bitni IN, ALI, ekskluzivni ALI ( MPI_BAND, MPI_BOR, in

MPI_BXOR);

• Dodatno lahko definiramo tudi svoje lastne operacije.

Page 23: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 23

16 funkcij poenostavljenega MPI

Osnovne funkcije:– MPI_INIT, MPI_FINALIZE, – MPI_COMM_SIZE, MPI_COMM_RANK, – MPI_SEND, MPI_RECV, MPI_SENDRECV

Skupinska komunikacija: – MPI_BARRIER, – MPI_BCAST, MPI_GATHER, MPI_SCATTER– MPI_REDUCE, MPI_ALLREDUCE

Kontrolne funkcije:– MPI_WTIME, MPI_STATUS, MPI_INITIALIZED– MPI_GET_COUNT

• Je potrebno še kaj (zakaj)?

Page 24: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 24

Primer: Računanje PI - 01 | 4/(1+x2) = 0

Če je n število intervalov, je numerično izračunan določeni integral enak vsoti n delnih vsot:

(1/n)* [4/(1+x2i) ]

za x = (1/n) * (i - 0.5) in

i = (1…n),

kar je enako približni vrednosti števila .

Na sliki: n=5; 1/n=1/5=0.2

x=0.1, 0.3, 0.5, 0.7, 0.9

Page 25: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 25

Primer: Računanje PI - 01 | 4/(1+x2) = 0

Če je p število procesorjev lahko numerično integriranje opravijo vzporedno in sicer vsak s svojim pod-intervalom, tako da je i=myid+1, i+p, i+2p, … in i<=n. Vsak procesor računa vsak p-ti interval. Na vsakem dobimo rezultat s tremi (P1) in dvema (P2) delnima vsotama.

Globalna vsota je enaka približni vrednosti števila .

Page 26: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 26

Primer: Računanje PI - 1#include "mpi.h"#include <math.h>int main(int argc, char *argv[])

{int done = 0, n, myid, numprocs, i, rc;double PI25DT = 3.141592653589793238462643;double mypi, pi, h, sum, x, a;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myid);while (!done) { if (myid == 0) { printf("Enter the number of intervals: (0 quits) "); scanf("%d",&n); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) break;

Page 27: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 27

Primer: Računanje PI - 2

h = 1.0 / (double)n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h * ((double)i - 0.5); sum += 4.0 / (1.0 + x*x); } mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT));}MPI_Finalize();

return 0;

}

Page 28: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 28

VS 2011/12 – DN2 Rezultate To datoteko z izpolnjeno tabelo mi jo pošljite na moj e-naslov ([email protected]) do 25. 1. 2013 do 16h.

Rešitev, ki bodo prispele kasneje ne bom upošteval.

Imenu datoteke, ki naj bo v prilogi, dodajte svoj ime_priimek. Odposlana tabela z rezultati DN2 (tudi če je prazna), je pogoj za opravljanje izpita v 1. in 2. roku (31.1 in 14.2). Ocena za DN2 je od 0-30% deleža v izpitni oceni.

Ocena DN1 bo prispevala do 15% (vsi, ki sem jim sprejel DN1 imajo 10%, tisti, ki so predstavili rezultate imajo 15%.

Kriterij za končno izpitno oceno: 6 > 66%; 7 > 74%; 8 > 82%; 9 > 90%; 10 > 95%;

ocena vaj: izpitna ocena ± 1

Page 29: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 29

Izpit – primer izpitnih vprašanj

Page 30: Uvod v  MPI  – 2. del Vzporedno programiranje s programsko knjižnico za prenos sporočil

Univerza v Ljubljani, FE "Vzporedni sistemi - VS" ZS-2012/13 30

Izpit – primer izpitnega obrazca