Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Magda Heiken Geändert vor über 10 Jahren
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 )
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.