35
C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Embed Size (px)

Citation preview

Page 1: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

C. Boehme, O. Haan, U. Schwardmann

GWDG

Übungen II

Programmierung von Parallelrechnern

Page 2: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 2

Beispiele • Berechnung von durch numerische

Integration

• Raleigh - Ritz - Methode– Spaltenblock -Verteilung– Reihenblock - Verteilung

• 2-dim Wärmeleitungsgleichung

Page 3: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 3

Berechnung von

Inhalt des Kreissegmentes = / 4

dxx 1

0

214

Page 4: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 4

Numerische Integration

)(1

n

iixfI

Das Programm numint in pi.f berechnet diese Summe

Page 5: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 5

Aufgabe 1

Verteile die Berechnung der Summe auf nproc Tasks

p0 p1 p2 p3

Page 6: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 6

Numerische Integration mit vorgegebener Genauigkeit

)(1

n

iin xfI

Das Programm numintprec in pi_p.f berechnet die Summemit vorgegebener Genauigkeit

nnn IIII 22

Page 7: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 7

Numerische Integration mit vorgegebener Genauigkeit

Unterteilung des Integrationsgebietesin nin Intervalle, jedes Intervall mit eigenem zur Erzielung der vorgegebenen Genauigkeit

a b

nin

abab

nin

abiaa

dxxfdxxf

iii

b

a

b

a

nin

i

i

i

,

)()(1

0

Page 8: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 8

Aufgabe 2

Verteile die Berechnung der nin Integrale auf nproc Tasks,mit Berücksichtigung der Lastverteilung (nin >> nproc).

Hinweis: Benutze das Verarbeitungsmodell Farmer-Worker.p0 ist der Farmer, der die Aufgaben zuteilt,

p1,…pnproc-1 sind die Worker, die nach Arbeit rufen, sobald

sie frei sind.

Page 9: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 9

Aufgabe 2

Farmer: me = 0tres = 0Schleife über nintv Intervalle i

Empfange res von anytasktres = tres + resiw = status(mpi_source)Sende i nach iw

Schleife über np-1 Worker iwSende -1 nach iw

Worker: me > 0res = 0Sende res nach 0Schleife über nintv Intervalle iEmpfange i von 0Wenn i <0 fertigres = work(i)sende res nach 0

Page 10: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 10

Raleigh - Ritz - Methode

Eigenwertproblem :

Sei

210, iii vvA

0mit 0 rr ii

i vx

0

01

0000 //

v

vvvxA

nn

in

ii

in

ini

ii

n rrrr

111

0 )/)(lim xAxA nn

n

Page 11: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 11

Algorithmus Raleigh - Ritz

Sequentielles Fortran Programm

xx

Axx

x

A

1

1

1

Schleife

1mitWähle

Matrix ereInitialisi

x

xR

Rn

nn

Page 12: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 12

Parallele Matrix-Vektor Multiplikation Verteilung in Spaltenblöcken

))1(:1():1(

))1(:1():1(

))1(:1,:1():1,:1(

:Daten dieliegen Prozessor auf

und von El. , n Spalten vo / :lokal

1,,0,n Prozessore

nlipnlipynlyl

nlipnlipxnlxl

nlipnlipnAnlnAl

ip

nlnpnnl

npipnp

yxA

Page 13: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 13

Parallele Matrix-Vektor Multiplikation Spaltenblock-Verteilung

LokaleTeilergebnisse

GlobaleSummierung

Page 14: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 14

Programm ritz_dist_col Paralleler Raley-Ritz Algorithmus

mit Spaltenblock-Verteilung

Ser Eingabe: Matrixdimension n

Ser Initialisierung von A

Par Verteilung von A nach Al

Par Startwert von xl

Schleife

Par yt = Al * xl

Par globale Summe yl

Ser = yl(1)

Par verteile

Par xl = 1/* yl

ritz_dist_col

dist_index dist_matrix_colblock

DGEMVcollect_vector

MPI_BCAST

Page 15: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 15

Globale Summierung I : Sammeln

do end

do end

i)1-yt(ial yl(i) yl(i)

nl , 1 i do

ipfr)nl,...,t(ial),MPI_RECV(y call

ipto,..nto,...,t(iato),MPI_SEND(y call

np) (mod ip- myid ipfr

np) (mod ip myid ipto

1-np , 0 ip do

)/(

:dZeitaufwan1 npnctnpt latred

Programm in collect_vector.f

Page 16: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 16

Send-Receive

Bei blockierendem Senden Deadlockgefahr!

ierr)status,comm,ource,tag,datatype,cbuf,count, MPI_RECV(call

ierr)mm,est,tag,codatatype,dbuf,count, MPI_SEND(call

ierr)status,g,comm,source,rtae,t,rdatatyprbuf,rcoun

stagdest,sdatatype,scount,ECV(sbuf, MPI_SENDRcall

SENDRECV vermeidet Deadlock

Page 17: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 17

Globale Summierung II : MPI_REDUCE

doend

nl,...) yl, yt(ia),(MPI_REDUCE call

p)firstind(i ia

p)firstind(i- 1)pfirstind(i nl

1- nproc , 0 ip do

)/(ln

:dZeitaufwan1

2 npnctnpnpt latred

Programm in reduce_vector.f

Page 18: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 18

Aufgabe 1: MPI_REDUCE • Modifikation von collect-vector mit

MPI_REDUCE• Syntax : MPI_Reduce(sendbuf, recvbuf, count, datatype, operation, root, comm)

• (Dateien in Uebungen/Ritz )

Page 19: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 19

Aufgabe 1a: MPI_REDUCE_SCATTER • Modifikation von collect-vector mit MPI_REDUCE_SCATTER• Syntax :

MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, operation, comm)

do end

p)firstind(i- 1)pfirstind(i (ip)recvcounts

1- nproc , 0 ip do

Page 20: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 20

Parallele Matrix-Vektor Multiplikation Verteilung in Zeilenblöcken

))1(:1():1(

))1(:1():1(

):1,)1(:1():1,:1(

:Daten dieliegen Prozessor auf

und von El. , n Zeilen vo/ :lokal

1,,0,n Prozessore

nlipnlipynlyl

nlipnlipxnlxl

nnlipnlipAnnlAl

ip

nlnpnnl

npipnp

yxA

Page 21: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 21

Parallele Matrix-Vektor Multiplikation Zeilenblock-Verteilung

Bereitstellung desglobalen Vektors

LokaleErgebnisse

Page 22: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 22

Programm ritz_dist_rowParalleler Raley-Ritz Algorithmus

mit Zeilenblock-Verteilung

Ser Eingabe: Matrixdimension n

Ser Initialisierung von A

Par Verteilung von A nach Al

Par Startwert von xl

Schleife

Par globaler Vektor xt

Par yl = Al * xt

Ser = yl(1)

Par verteile Par xl = 1/ * yl

ritz_dist_row

dist_indexdist_matrix_rowblock

global_vector

DGEMV

MPI_BCAST

Page 23: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 23

Abgeleitete Datentypen für die Verteilung der globalen Matrix a

MPI_Type_vector(int count,int blocklen,int stride, MPI_Datatype oldtype,MPI_Datatype *newtype)

z.B. ml x n Zeilenblock einer m x n Matrix:

m

n

mlcount = nblocklen = mlstride = m

Page 24: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 24

Aufgabe: Benutze Type_vector zur Verteilung von a

Modifiziere dist_matrix_rowblock 1. Definition eines neuen Typs rowblock mit

MPI_TYPE_VECTOR

2. Aktivieren des Typs mit MPI_TYPE_COMMIT(rowblock,ierrr)

3. Senden mit MPI_SEND(a[ia],1,rowblock,ip,0, MPI_COMM_WORLD,ierr)

4. Deaktivieren des Typs mit MPI_TYPE_FREE(rowblock,ierr)

Page 25: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 25

Aufgabe 2: global_vector• Modifikation von global_vector mit

MPI_ALLGATHERSyntax:MPI_ALLGATHERV(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm, ierr)

do ip = 0 , nproc -1

recvcounts(ip) = firstind(ip+1) – firstind(ip)

displs(ip) = firstind(ip) – 1

end do

• (Dateien in Uebungen/Ritz )

Page 26: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 26

Aufgabe 2a: global_vector

• Modifikation von global_vector mit MPI_SENDRECV

Page 27: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 27

Wärmeleitungsgleichung

),1(,),0(,)1,(,)0,(

),(0

)1,()1,(),1(),1(

),(),(

)1:0()(1,0 :erungDiskretisi

),,(,),0(

1,01,0),,(),(),(

2211

21

21212121

2121

2,12,1

:Randwerte

: teAnfangswer

: PunkteInnere

: Randwerteu. -Anfangs

inuiuniuiu

iiu

iiuiiuiiuiiur

iiusiiun

nix

tuu

tftuktuc t

xxx

xxxx

Page 28: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 28

Finite-Differenzen Gitter

Page 29: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 29

Algorithmus Wärmeleitung

unu

epsdiff

uundiff

utzeitschritun

randnu

anfnnu

epsrnnnt

Kopieren

stop wenn

:Beendigung aufTest

Änderung

)(: eitschritt Z

Schleife

,...)11:0,0(

,)2:1,1:1( Startwerte

,,2,1, :Eingabe

zeitschritt

initialisierung

norm

kopie

waermeleitung

Page 30: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 30

Partitionierung mit Randaustausch

Page 31: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 31

Algorithmus Wärmeleitung - parallel

unu

epsdiff

uundiff

utzeitschritun

randnu

anfnnu

epsrnnnt

Kopieren

stop wenn

:Beendigung aufTest

Änderung

)(: eitschritt Z

schRandaustau

Schleife

,...)11:0,0(

,)2:1,1:1( Startwerte

,,2,1, :Eingabe

zeitschritt

Initialisierung_mpi

norm

kopie

Waermeleitung_mpi

randaustausch

Page 32: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 32

Randaustausch

Mit MPI_SENDRECV:Jeder Prozessor sendet 1. Spalte nach links, empfängt Werte für 0. Spalte von links,Jeder Prozessor sendet n2l. Spalte nach rechts, empfängt Werte für n2l+1. Spalte von rechts.

Randspalten werden mit Prozessor MPI_PROC_NULL ausgetauscht!

Subroutine randaustausch

Page 33: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 33

Skalierungsanalyse

npnprr

npn

crnnp

trnnp

nprr

cntrnpnttt

n

npn

np

lat

np

latkore

/const

Prozessor proPunkten von Zahlkonstante :Skalierung

/1

1

)(2/6

Werte2 : dionsaufwanKommunikat

nOperatione /6 : andRechenaufw

2

231

112

2

Page 34: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 34

2-dimensionale Verteilung

nprr

npn

crnnq

trnnp

nprr

cnqntrnpnttt

npnnqn

npn

nnqnp

np

lat

np

latkore

const

Prozessor proPunkten von Zahlkonstante :Skalierung

/1

1

)/(4/6

Werte/4/4 : dionsaufwanKommunikat

nOperatione /6 : andRechenaufw

: eGittergröß , ahlProzessorz

2

232

112

2

2

22

Page 35: C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern

Programmierung von Parallelrechnern: Übungen II 35

Aufgabe 3: Wärmeleitungsgleichung mit 2-dim. Verteilung

Modifikation gegenüber 1-dim Verteilung:

Eingabe von nq1,nq2 Überprüfen, ob nq1*nq2 gleich nprocGenerieren der Blockgrößen n1l,n2lAbbildung myid->(myid1,myid2)Initialisierung der lokalen Blöcke Randaustausch bei 2-dim Verteilung

(Dateien in Uebungen/Waermeleitung )