programmierung von parallelrechnern n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Programmierung von Parallelrechnern PowerPoint Presentation
Download Presentation
Programmierung von Parallelrechnern

Loading in 2 Seconds...

play fullscreen
1 / 36

Programmierung von Parallelrechnern - PowerPoint PPT Presentation


  • 122 Views
  • Uploaded on

Programmierung von Parallelrechnern. C. Boehme, O. Haan, U. Schwardmann GWDG. Übungen II. Beispiele. Berechnung von p durch numerische Integration Raleigh - Ritz - Methode Spaltenblock -Verteilung Reihenblock - Verteilung 2-dim Wärmeleitungsgleichung. Berechnung von p.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Programmierung von Parallelrechnern' - kieran-bowman


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
programmierung von parallelrechnern

Programmierung von Parallelrechnern

C. Boehme, O. Haan, U. Schwardmann

GWDG

Übungen II

beispiele
Beispiele
  • Berechnung von p durch numerische Integration
  • Raleigh - Ritz - Methode
    • Spaltenblock -Verteilung
    • Reihenblock - Verteilung
  • 2-dim Wärmeleitungsgleichung

Programmierung von Parallelrechnern: Übungen II

berechnung von p
Berechnung von p

Inhalt des Kreissegmentes = p / 4

Programmierung von Parallelrechnern: Übungen II

numerische integration
Numerische Integration

Das Programm numint in pi.f (pi.py) berechnet diese Summe

Programmierung von Parallelrechnern: Übungen II

aufgabe 1
Aufgabe 1

Verteile die Berechnung der Summe auf nproc Tasks

p0 p1 p2 p3

pi_mpi.fpi_mpi.py

Programmierung von Parallelrechnern: Übungen II

numerische integration mit vorgegebener genauigkeit
Numerische Integration mit vorgegebener Genauigkeit

Das Programm numintprec in pi_p.f (pi_p.py) berechnet die Summe mit vorgegebener Genauigkeit

Programmierung von Parallelrechnern: Übungen II

numerische integration mit vorgegebener genauigkeit1
Numerische Integration mit vorgegebener Genauigkeit

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

b

a

Programmierung von Parallelrechnern: Übungen II

verarbeitungsmodell farmer worker
Verarbeitungsmodell Farmer-Worker

Verteile die Berechnung der nin Integrale auf nproc Tasks

Farmer: me = 0

tres = 0

Schleife über nin Intervalle i

Empfange res von anytask

tres = tres + res

ipw = status(mpi_source)

Sende i nach ipw

Schleife über np-1 Worker ipw

Sende -1 nach ipw

  • Worker: me > 0
  • res = 0
    • Sende res nach 0
  • Schleife über nin Iterationen
    • Empfange i von 0
    • Wenn i <0 fertig
    • res = work(i)
    • sende res nach 0

pi_p_mpi.fpi_p_mpi.py

Programmierung von Parallelrechnern: Übungen II

aufgabe 2
Aufgabe 2

Modifiziere das Verarbeitungsmodell!

Programmierung von Parallelrechnern: Übungen II

modifiziertes verarbeitungsmodell
Modifiziertes Verarbeitungsmodell

Verteile die Berechnung der nin Integrale auf nproc Tasks

Farmer: me = 0

tres = 0

Schleife über np-1 Worker iw:

Sende iw nach iw

Schleife über nin Intervalle i

Empfange res von anytask

tres = tres + res

iw = status(mpi_source)

Wenn i<nin-np+1:

Sende i + np-1 nach iw

Sonst:

Sende -1 nach iw

Worker: me > 0

Schleife über nin+np

Empfange i von 0

Wenn i <0 fertig

res = work(i)

sende res nach 0

Programmierung von Parallelrechnern: Übungen II

raleigh ritz methode
Raleigh - Ritz - Methode

Eigenwertproblem :

Sei

Programmierung von Parallelrechnern: Übungen II

algorithmus raleigh ritz
Algorithmus Raleigh - Ritz

Sequentielles Fortran Programm

Sequentielles python Programm

Programmierung von Parallelrechnern: Übungen II

parallele matrix vektor multiplikation verteilung in spaltenbl cken
Parallele Matrix-Vektor Multiplikation Verteilung in Spaltenblöcken

Programmierung von Parallelrechnern: Übungen II

parallele matrix vektor multiplikation spaltenblock verteilung
Parallele Matrix-Vektor Multiplikation Spaltenblock-Verteilung

Lokale

Teilergebnisse

Globale

Summierung

Programmierung von Parallelrechnern: Übungen II

programm ritz dist col
Programm ritz_dist_col

ritz_dist_col

dist_index

dist_matrix_colblock

(fortranpython)

DGEMV

collect_vector

(fortranpython)

MPI_BCAST

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 l = yl(1)

Par verteile l

Par xl = 1/l * yl

Programmierung von Parallelrechnern: Übungen II

globale summierung i mpi reduce
Globale Summierung I : MPI_REDUCE

Programm in reduce_vector.f

reduce_vector.py

Programmierung von Parallelrechnern: Übungen II

aufgabe 1 mpi reduce scatter
Aufgabe 1: MPI_REDUCE_SCATTER
  • Modifikation von collect-vector mit MPI_REDUCE_SCATTER
  • Syntax : MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, operation, comm)
  • n=firstind(nproc) Elemente in sendbuf werden mit MPI_SUM über alle Prozesse summiert.
  • recvcounts(ip) Elemente werden nach Prozess ip gescattert

Programmierung von Parallelrechnern: Übungen II

globale summierung ii sammeln
Globale Summierung II : Sammeln

Programm in collect_vector.f

Programmierung von Parallelrechnern: Übungen II

aufgabe 21
Aufgabe 2:
  • Modifikation von collect-vector: Sammeln
  • (Dateien in Uebungen/Ritz)

Programmierung von Parallelrechnern: Übungen II

send receive
Send-Receive

Bei blockierendem Senden Deadlockgefahr!

SENDRECV vermeidet Deadlock

Programmierung von Parallelrechnern: Übungen II

parallele matrix vektor multiplikation verteilung in zeilenbl cken
Parallele Matrix-Vektor Multiplikation Verteilung in Zeilenblöcken

Programmierung von Parallelrechnern: Übungen II

parallele matrix vektor multiplikation zeilenblock verteilung
Parallele Matrix-Vektor Multiplikation Zeilenblock-Verteilung

Bereitstellung des

globalen Vektors

Lokale

Ergebnisse

Programmierung von Parallelrechnern: Übungen II

programm ritz dist row
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 l= yl(1)

Par verteile l

Par xl = 1/l * yl

ritz_dist_row

dist_index

dist_matrix_rowblock

(fortranpython)

global_vector

(fortranpython)

DGEMV

MPI_BCAST

Programmierung von Parallelrechnern: Übungen II

abgeleitete datentypen f r die verteilung der globalen matrix a
Abgeleitete Datentypen für die Verteilung der globalen Matrix a

MPI_Type_vector(count, blocklen, stride, oldtype, newtype)

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

n

count = nblocklen = mlstride = m

ml

m

Programmierung von Parallelrechnern: Übungen II

aufgabe benutze type vector zur verteilung von a
Aufgabe: Benutze Type_vector zur Verteilung von a
  • Modifiziere dist_matrix_rowblock
  • Definition eines neuen Typs rowblock mit MPI_TYPE_VECTOR
  • Aktivieren des Typs mit MPI_TYPE_COMMIT(rowblock,ierrr)
  • Senden mitMPI_SEND(a[ia],1,rowblock,ip,0, MPI_COMM_WORLD,ierr)
  • Deaktivieren des Typs mitMPI_TYPE_FREE(rowblock,ierr)

Programmierung von Parallelrechnern: Übungen II

aufgabe 2 global vector
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)

Programmierung von Parallelrechnern: Übungen II

aufgabe 2a global vector
Aufgabe 2a: global_vector
  • Modifikation von global_vector mit MPI_SENDRECV

Programmierung von Parallelrechnern: Übungen II

w rmeleitungsgleichung
Wärmeleitungsgleichung

Programmierung von Parallelrechnern: Übungen II

finite differenzen gitter
Finite-Differenzen Gitter

Programmierung von Parallelrechnern: Übungen II

algorithmus w rmeleitung
Algorithmus Wärmeleitung

Waermeleitung (fortranpython)

initialisierung

Zeitschritt

(fortranpython)

norm

kopie

Programmierung von Parallelrechnern: Übungen II

partitionierung mit randaustausch
Partitionierung mit Randaustausch

Programmierung von Parallelrechnern: Übungen II

algorithmus w rmeleitung parallel
Algorithmus Wärmeleitung - parallel

Waermeleitung_mpi (fortranpython)

Initialisierung_mpi

Randaustausch(fortranpython)

zeitschritt

norm

kopie

Programmierung von Parallelrechnern: Übungen II

randaustausch
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 (fortranpython)

Programmierung von Parallelrechnern: Übungen II

skalierungsanalyse
Skalierungsanalyse

Programmierung von Parallelrechnern: Übungen II

2 dimensionale verteilung
2-dimensionale Verteilung

Programmierung von Parallelrechnern: Übungen II

aufgabe 3 w rmeleitungsgleichung mit 2 dim verteilung
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)

Programmierung von Parallelrechnern: Übungen II