1 / 36

Programmierung von Parallelrechnern

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.

Télécharger la présentation

Programmierung von Parallelrechnern

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Beispiele • Berechnung von p durch numerische Integration • Raleigh - Ritz - Methode • Spaltenblock -Verteilung • Reihenblock - Verteilung • 2-dim Wärmeleitungsgleichung Programmierung von Parallelrechnern: Übungen II

  3. Berechnung von p Inhalt des Kreissegmentes = p / 4 Programmierung von Parallelrechnern: Übungen II

  4. Numerische Integration Das Programm numint in pi.f (pi.py) berechnet diese Summe Programmierung von Parallelrechnern: Übungen II

  5. Aufgabe 1 Verteile die Berechnung der Summe auf nproc Tasks p0 p1 p2 p3 pi_mpi.fpi_mpi.py Programmierung von Parallelrechnern: Übungen II

  6. 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

  7. 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

  8. 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

  9. Aufgabe 2 Modifiziere das Verarbeitungsmodell! Programmierung von Parallelrechnern: Übungen II

  10. 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

  11. Raleigh - Ritz - Methode Eigenwertproblem : Sei Programmierung von Parallelrechnern: Übungen II

  12. Algorithmus Raleigh - Ritz Sequentielles Fortran Programm Sequentielles python Programm Programmierung von Parallelrechnern: Übungen II

  13. Parallele Matrix-Vektor Multiplikation Verteilung in Spaltenblöcken Programmierung von Parallelrechnern: Übungen II

  14. Parallele Matrix-Vektor Multiplikation Spaltenblock-Verteilung Lokale Teilergebnisse Globale Summierung Programmierung von Parallelrechnern: Übungen II

  15. 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

  16. Globale Summierung I : MPI_REDUCE Programm in reduce_vector.f reduce_vector.py Programmierung von Parallelrechnern: Übungen II

  17. 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

  18. Globale Summierung II : Sammeln Programm in collect_vector.f Programmierung von Parallelrechnern: Übungen II

  19. Aufgabe 2: • Modifikation von collect-vector: Sammeln • (Dateien in Uebungen/Ritz) Programmierung von Parallelrechnern: Übungen II

  20. Send-Receive Bei blockierendem Senden Deadlockgefahr! SENDRECV vermeidet Deadlock Programmierung von Parallelrechnern: Übungen II

  21. Parallele Matrix-Vektor Multiplikation Verteilung in Zeilenblöcken Programmierung von Parallelrechnern: Übungen II

  22. Parallele Matrix-Vektor Multiplikation Zeilenblock-Verteilung Bereitstellung des globalen Vektors Lokale Ergebnisse Programmierung von Parallelrechnern: Übungen II

  23. 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

  24. 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

  25. 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

  26. 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

  27. Aufgabe 2a: global_vector • Modifikation von global_vector mit MPI_SENDRECV Programmierung von Parallelrechnern: Übungen II

  28. Wärmeleitungsgleichung Programmierung von Parallelrechnern: Übungen II

  29. Finite-Differenzen Gitter Programmierung von Parallelrechnern: Übungen II

  30. Algorithmus Wärmeleitung Waermeleitung (fortranpython) initialisierung Zeitschritt (fortranpython) norm kopie Programmierung von Parallelrechnern: Übungen II

  31. Partitionierung mit Randaustausch Programmierung von Parallelrechnern: Übungen II

  32. Algorithmus Wärmeleitung - parallel Waermeleitung_mpi (fortranpython) Initialisierung_mpi Randaustausch(fortranpython) zeitschritt norm kopie Programmierung von Parallelrechnern: Übungen II

  33. 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

  34. Skalierungsanalyse Programmierung von Parallelrechnern: Übungen II

  35. 2-dimensionale Verteilung Programmierung von Parallelrechnern: Übungen II

  36. 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

More Related