Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "C. Boehme, O. Haan, U. Schwardmann GWDG Übungen II Programmierung von Parallelrechnern."—  Präsentation transkript:

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

2 Programmierung von Parallelrechnern: Übungen II2 Beispiele Berechnung von durch numerische Integration Raleigh - Ritz - Methode –Spaltenblock -Verteilung –Reihenblock - Verteilung 2-dim Wärmeleitungsgleichung

3 Programmierung von Parallelrechnern: Übungen II3 Berechnung von Inhalt des Kreissegmentes = / 4

4 Programmierung von Parallelrechnern: Übungen II4 Numerische Integration Das Programm numint in pi.f berechnet diese Summe pi.f

5 Programmierung von Parallelrechnern: Übungen II5 Aufgabe 1 Verteile die Berechnung der Summe auf nproc Tasks p0 p1 p2 p3

6 Programmierung von Parallelrechnern: Übungen II6 Numerische Integration mit vorgegebener Genauigkeit Das Programm numintprec in pi_p.f berechnet die Summe pi_p.f mit vorgegebener Genauigkeit

7 Programmierung von Parallelrechnern: Übungen II7 Numerische Integration mit vorgegebener Genauigkeit Unterteilung des Integrationsgebietes in nin Intervalle, jedes Intervall mit eigenem zur Erzielung der vorgegebenen Genauigkeit a b

8 Programmierung von Parallelrechnern: Übungen II8 Aufgabe 2 Verteile die Berechnung der nin Integrale auf nproc Tasks, mit Berücksichtigung der Lastverteilung (nin >> nproc). Hinweis: Benutze das Verarbeitungsmodell Farmer-Worker. p 0 ist der Farmer, der die Aufgaben zuteilt, p 1,…p nproc-1 sind die Worker, die nach Arbeit rufen, sobald sie frei sind.

9 Programmierung von Parallelrechnern: Übungen II9 Aufgabe 2 Farmer: me = 0 tres = 0 Schleife über nintv Intervalle i Empfange res von anytask tres = tres + res iw = status(mpi_source) Sende i nach iw Schleife über np-1 Worker iw Sende -1 nach iw Worker: me > 0 res = 0 Sende res nach 0 Schleife über nintv Intervalle i Empfange i von 0 Wenn i <0 fertig res = work(i) sende res nach 0

10 Programmierung von Parallelrechnern: Übungen II10 Raleigh - Ritz - Methode Eigenwertproblem : Sei

11 Programmierung von Parallelrechnern: Übungen II11 Algorithmus Raleigh - Ritz Sequentielles Fortran Programm

12 Programmierung von Parallelrechnern: Übungen II12 Parallele Matrix-Vektor Multiplikation Verteilung in Spaltenblöcken

13 Programmierung von Parallelrechnern: Übungen II13 Parallele Matrix-Vektor Multiplikation Spaltenblock-Verteilung Lokale Teilergebnisse Globale Summierung

14 Programmierung von Parallelrechnern: Übungen II14 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 DGEMV collect_vector MPI_BCAST

15 Programmierung von Parallelrechnern: Übungen II15 Globale Summierung I : Sammeln Programm in collect_vector.fcollect_vector.f

16 Programmierung von Parallelrechnern: Übungen II16 Send-Receive Bei blockierendem Senden Deadlockgefahr! SENDRECV vermeidet Deadlock

17 Programmierung von Parallelrechnern: Übungen II17 Globale Summierung II : MPI_REDUCE Programm in reduce_vector.f reduce_vector.f

18 Programmierung von Parallelrechnern: Übungen II18 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 )

19 Programmierung von Parallelrechnern: Übungen II19 Aufgabe 1a: MPI_REDUCE_SCATTER Modifikation von collect-vector mit MPI_REDUCE_SCATTER Syntax : MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, operation, comm)

20 Programmierung von Parallelrechnern: Übungen II20 Parallele Matrix-Vektor Multiplikation Verteilung in Zeilenblöcken

21 Programmierung von Parallelrechnern: Übungen II21 Parallele Matrix-Vektor Multiplikation Zeilenblock-Verteilung Bereitstellung des globalen Vektors Lokale Ergebnisse

22 Programmierung von Parallelrechnern: Übungen II22 Programm ritz_dist_row Paralleler 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_index dist_matrix_rowblock global_vector DGEMV MPI_BCAST

23 Programmierung von Parallelrechnern: Übungen II23 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 ml count = n blocklen = ml stride = m

24 Programmierung von Parallelrechnern: Übungen II24 Aufgabe: Benutze Type_vector zur Verteilung von a Modifiziere dist_matrix_rowblock 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)

25 Programmierung von Parallelrechnern: Übungen II25 Aufgabe 2: global_vector Modifikation von global_vector mit MPI_ALLGATHER Syntax: 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 )

26 Programmierung von Parallelrechnern: Übungen II26 Aufgabe 2a: global_vector Modifikation von global_vector mit MPI_SENDRECV

27 Programmierung von Parallelrechnern: Übungen II27 Wärmeleitungsgleichung

28 Programmierung von Parallelrechnern: Übungen II28 Finite-Differenzen Gitter

29 Programmierung von Parallelrechnern: Übungen II29 Algorithmus Wärmeleitung zeitschritt initialisierung norm kopie waermeleitung

30 Programmierung von Parallelrechnern: Übungen II30 Partitionierung mit Randaustausch

31 Programmierung von Parallelrechnern: Übungen II31 Algorithmus Wärmeleitung - parallel zeitschritt Initialisierung_mpi norm kopie Waermeleitung_mpi randaustausch

32 Programmierung von Parallelrechnern: Übungen II32 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

33 Programmierung von Parallelrechnern: Übungen II33 Skalierungsanalyse

34 Programmierung von Parallelrechnern: Übungen II34 2-dimensionale Verteilung

35 Programmierung von Parallelrechnern: Übungen II35 Aufgabe 3: Wärmeleitungsgleichung mit 2-dim. Verteilung Modifikation gegenüber 1-dim Verteilung: Eingabe von nq1,nq2 Überprüfen, ob nq1*nq2 gleich nproc Generieren der Blockgrößen n1l,n2l Abbildung myid->(myid1,myid2) Initialisierung der lokalen Blöcke Randaustausch bei 2-dim Verteilung (Dateien in Uebungen/Waermeleitung )


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

Ähnliche Präsentationen


Google-Anzeigen