Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

WWR-Praktikum Parallele Programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "WWR-Praktikum Parallele Programmierung"—  Präsentation transkript:

1 WWR-Praktikum Parallele Programmierung
Sabine Rathmayer

2 Gruppeneinteilung Beispiele für par. Anwendungen, theor. Grundlagen, Par. Pgmstrukt., Datenabhängigkeiten Neslihan Kalay, Sebastian Pohle, Oezlem Maras, Mariam Saadat Modellhafte Ansätze, Einf. in par. Programmierparadigmen Matthias Braun, Andreas Fedrizzi, Michael Marolachakis, Peter Bartmann Einführung in MPI Violeta Monova, Ioana Kalaydjieva, Mathias Busch, Benjamin Stetter Einführung in OpenMP, Par. E/A, Performanceanalyse, Optimierung ???, Tao Zhuang, Daniel Reiss, Steffi Lämmle Praktikum zu OpenMP/ MPI Thomas Kloppe, Steffen Bergmann, Andreas Klinger, Sebastian Hans

3 Kurzfristige Änderungen
Termin Projektmanagement statt Betreuung Gruppen 1, 2 und 5

4 GRUPPE 1

5 Einführung Ein Parallelrechner besteht aus einer Menge von Verarbeitungselementen, die in einer koordinierten Weise teilweise zeitgleich zusammenarbeiten, um eine Aufgabe zu lösen. Die Verarbeitungselemente können sein: spezialisierte Einheiten, wie z.B. die Pipelinestufen einer Vektor-Pipeline oder die Vektor-Pipelines der Vektoreinheit eines Vektorrechners, gleichartige Rechenwerke, wie z.B. die Verarbeitungselemente eines Feldrechners, Prozessorknoten eines Multiprozessors (die Parallelrechner in einem engeren Sprachgebrauch), vollständige Rechner, wie z.B. Workstations oder Personalcomputer eines Workstation- oder PC-Clusters, die per Software zeitweilig zu einem virtuellen Parallelrechner zusammengeschlossen werden, selbst wieder ganze Parallelrechner oder Workstation-Cluster, welche über Fernverbindungen gekoppelt sind und als Metacomputer oder Hypercomputer betrieben werden.

6 Konfigurationen Prozessor Verbindungsnetz gemeinsamer Speicher
Globaler Speicher Physikalisch verteilter Speicher Verteilter Adreßraum Gemeinsamer Adreßraum Leer lokaler Speicher SMP Symmetrischer Multiprozessor DSM Distributed-shared-memory-Multiprozessor send receive Nachrichtengekoppelter (Shared-nothing-) Multiprozessor

7 Anwendungen Simulationen Datenbanken Webserver Strömungssimulationen
Wettervorhersage Klimaforschung Erdbebenvorhersage Hochspannungstechnik Datenbanken Webserver

8 Kennzahlen Die (Gesamt-)Ausführungszeit T (Execution Time) eines parallelen Programms ist die Zeit zwischen dem Starten der Programmausführung auf einem der Prozessoren bis zu dem Zeitpunkt, an dem der letzte Prozessor die Arbeit an dem Programm beendet hat. Während der Programmausführung sind alle Prozessoren in einem der drei Zustände „rechnend“, „kommunizierend“ oder „untätig“.

9 Ausführungszeit Ausführungszeit T eines parallelen Programms auf einem dezidiert zugeordneten Parallelrechner setzt sich zusammen aus: Berechnungszeit Tcomp (Computation Time) eines Algorithmus: die Zeit, die für Rechenoperationen verwendet wird, Kommunikationszeit Tcomm (Communication Time) eines Algorithmus: die Zeit, die für Sende- und Empfangsoperationen verwendet wird, Untätigkeitszeit Tidle (Idle Time): die Zeit, die mit Warten (auf zu empfangende Nachrichten oder auf das Versenden) verbraucht wird. Es gilt: T = Tcomp + Tcomm + Tidle

10 Beschleunigung und Effizienz
(Leistungssteigerung, Speed-up) Effizienz T(1) Ausführungszeit auf einem Einprozessorsystem in Schritten (oderTakten). T(n) Ausführungszeit auf einem Multiprozessorsystem mit n Prozessoren in Schritten (oder Takten).

11 Amdahls Gesetz a Summe der Ausführungszeit des nur sequentiell ausführbaren Programmteils

12 Parallele Programmstrukturen
Beobachtungen: Programme sind in den wenigsten Fällen perfekt parallel typisch ist vielmehr eine Folge von sequentiellen und parallelen Abschnitten für die Verwaltung gibt es i.W. drei Modelle SPMD Fork-Join Workerpool (Reusable thread pool) Modell

13 Beispiel … … Sequent. Code (Initialisierung) Sequent. Code
Paralleler Code Sequent. Code (Programmschluss) Sequent. Code (Initialisierung) Sequent. Code

14 Parallele Programmstrukturen - SPMD
Bei Programmstart werden die benötigte Anzahl paralleler Kontrollfäden erzeugt gemeinsame Terminierung am Programmende sequentielle Programmteile werden mehrfach (teilweise redundant) ausgeführt parallele Programmteile werden von je einem Prozess ausgeführt Paralleler Code Sequent. Code (Programmschluss) Sequent. Code (Initialisierung) Sequent. Code

15 Parallele Programmstrukturen – Fork-Join-Modell
exakte Wiedergabe der Programmstruktur: erster Prozess startet Programmausführung er realisiert am Anfang jeder parallelen Ausführung passend viele fork-Operationen Sohn-Prozesse arbeiten parallel weiter Join-Operation am Ende (Synchronisation mit Vater-Prozess) Sequent. Code (Initialisierung) Paralleler Code Sequent. Code Paralleler Code Sequent. Code (Programmschluss)

16 Parallele Programmstrukturen – Threadpool
Kombination von SPMD und Fork-Join Vermeidung des hohen Aufwands für Erzeugung und Terminierung der Kontrollfäden Unterbindung des Mehrfachablaufs der sequentiellen Teile Kontrollfäden werden erzeugt, wenn sie erstmalig gebraucht werden, Terminierung am Ende Idle-Zustand in sequentiellen Programmteilen Sequent. Code (Initialisierung) Paralleler Code Sequent. Code Paralleler Code Sequent. Code (Programmschluss)

17 Datenabhängigkeiten Abhängigkeiten, z.B. weil Task i Daten von Task j für weitere Berechnungen benötigt Synchronisation notwendig Berstein Bedingung (1966) Datenabhängigkeitsgraph Abhängigkeiten in Schleifen entdecken

18 Literatur Folien Prof. Gerndt: Parallel Programming
Parallelrechner: Architekturen, Systeme, Werkzeuge (Klaus Waldschmidt Hrsg.) Parallel Computing: Paradigms and Applications (Albert Zomaya ed.) Internet-Recherche Bsp:

19 GRUPPE 2

20 Entwurf paralleler Programme: Modell von Foster
Partitionierung: Die Berechnungsschritte und die Daten, auf denen die Berechnungen ausgeführt werden, werden in kleine Aufgaben aufgeteilt. Hauptziel: möglichst viel Parallelität zu entfalten. Kommunikation: Kommunikationsanforderungen festlegen, d.h. die zur Aufgabenkoordination notwendige Kommunikation wird festgestellt und es werden geeignete Kommunikationsstrukturen und Algorithmen definiert. Aggregierung (agglomeration): Aufgaben und Kommunikationsstrukturen bezüglich der Leistungsanforderungen und bezüglich ihrer Implementierungskosten evaluieren. Falls notwendig, Aufgaben zu umfassenderen Aufgabenbereichen zusammenfassen, um die Leistung zu erhöhen oder Entwicklungskosten zu sparen. Abbildung: Die Aufgaben den Prozessoren zuordnen. Ziele: maximale Prozessorauslastung und minimale Kommunikationskosten. Prozessorzuteilung kann statisch vom Compiler oder dynamisch zur Laufzeit durch Anwendung von Lastbalancierungealgorithmen geschehen.

21 Parallele Programmierparadigmen
Datenparallele Programmierung: High Performance Fortran Shared Memory Ansätze Direktiven Threads Nachrichtenaustausch

22 High Performance Fortran
Spracherweiterung zu Fortran90 Datenparallele Programmierung Compiler Direktiven (Datenverteilung: DISTRIBUTE) neue Sprachkonstrukte (parallele Anweisungen: FORALL) owner computes rule intrinsische Funktionen (Abfragefunktionen zum Test der Datenverteilung, SUM,…)

23 Shared Memory Ansätze: Threads
Gemeinsame und private Variablen bestimmen p-1 zusätzliche Threads generieren Alle Threads durchlaufen bestimmte Unterprogramme Unterprogramm muss so geschrieben werden, dass es nur auf einem Teildatensatz ausgeführt wird (Felddurchläufe werden aus eigener id herausgerechnet) Lokale Terminierungsinformation wird berechnet Globale Terminierungsinformation wird aus lokaler errechnet create, g_malloc, lock, unlock, barrier,wait-for-end, wait, set

24 Shared Memory Ansätze: Direktiven
Programmiermodell auf höherem Level als Threads Standard OpenMP Omp parallel clause: block wird redundant berechnet Omp parallel for clause: Schleife wird parallel berechnet, Synchronisation vor und nach der Schleife Omp barrier Omp atomic

25 Nachrichtenaustausch
Bei den nachrichtengekoppelten Systemen gibt es keine gemeinsamen Speicher- oder Adreßbereiche. Die Kommunikation geschieht durch Austauschen von Nachrichten über ein Verbindungsnetz. Alle Prozessoren besitzen nur lokale Speicher. Prozessorknoten sind üblicherweise durch serielle Punkt-zu-Punkt-Verbindungen gekoppelt. Typische Kommunikationsgeschwindigkeiten liegen bei 20–320 MBit (oder höher!!) pro Sekunde. Die Skalierbarkeit ist bei nachrichtengekoppelten Multiprozessoren im Prinzip unbegrenzt. Parallelität läßt sich in effizienter Weise auf Programm- oder Taskebene nutzen. Block- oder Anweisungsebenenparallelität sind nach heutiger Übertragungstechnologie nicht effizient nutzbar.

26 Auf allen MIMD-Rechnern und auf heterogenen Workstation-Clustern verwendbar.
Konzept des Nachrichtenaustauschs verlangt zur Zeit noch sehr viel „Handarbeit“. Ein nachrichtengesteuertes Programm besteht aus P sequentiellen Programmen, wobei jedes zu einem eigenen Prozeß gehört. Jedes sequentielle Programm nutzt die Kommunikationsbefehle zum Datenaustausch und zur Synchronisation. Kommunikationsbefehle durch Bibliotheken eingebunden und so dem Programmierer zugänglich gemacht. Eine nachrichtengekoppelte Programmierumgebung setzt sich aus einer sequentiellen Programmiersprache, wie z.B. C oder FORTRAN, und einer Message-passing-Bibliothek zusammen.

27 Synchrone (blockierende) send-/receive-Befehle
csend(type, buf, len, node, pid) long type; Nachrichtennummer char *buf; Zeiger auf Nachrichtenpuffer long len, node, pid; Nachrichtenlänge, Nummer des Empfängerknotens und des Empfängerprozesses blockiert nur, bis der Sendepuffer wieder frei ist und nicht, bis die Nachricht empfangen wurde!! crecv(typesel, buf, len) long typesel; Nachrichtennummer, -maske oder -1 für jede beliebige Nachricht long len; Länge des Puffers blockiert, bis die Nachricht vollständig im Empfangspuffer steht

28 Informationsbefehle über eine empfangene Nachricht
long infocount() Länge der Nachricht (len) long infonode() Prozessornummer des Senders (node) long infopid() Prozeßnummer des Senders (pid) long infotype() Nachrichtennummer (type) allgemeine Informationsbefehle long mynode() Knotennummer long mypid() Prozeßnummer long numnodes() Anzahl Knoten des Subcubes long nodedim() Dimension des Subcubes unsigned long mclock() Zeit in Millisekunden

29 Literatur Folien Prof. Gerndt: Parallel Programming !!!
Designing and Building Parallel Programs (Ian Foster, 1995) Internet-Recherche Bsp:

30 GRUPPE 3

31 Einführung in MPI Wichtigste Konstrukte
Weiterführende Themen wie asynchrone Kommunikation Kollektive Operationen Beispiele

32 Historie bis 1993 viele verschiedene Message Passing Bibliotheken (PVM, NX,PARMACS, P4,…) Jan erstes Treffen des MPI-Forums: Hard- und Softwarehersteller, Universitäten, Forschungseinrichtungen Mai 1994 MPI 1.0 Juni 1995 MPI 1.1 Juli 1997 MPI 1.2 MPI 2.0: dyn. Prozesserzeugung Parallele E/A

33 Hauptroutinen MPI 1.2 hat 129 Funktionen
Es ist möglich ein richtiges MPI-Programm mit nur 6 Funktionen zu schreiben: MPI_Init MPI_Finalize MPI_Comm_Size MPI_Comm_rank MPI_Send MPI_Recv

34 Beispiele MPI_Comm_size: Anzahl der Prozesse in der Prozessgruppe
MPI_Comm_rank: Eigene Prozessnummer (wird benötigt, um ein SPMD Programm zu schreiben MPI_Send: blockierendes Senden; Sendepuffer wird frei gegeben, wenn im Empfangspuffer des anderen Knotens! MPI_Recv(void *buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Status status) MPI_Probe und MPI_Iprobe MPI_Barrier MPI_Bcast MPI_Gather, MPI_Scatter …viele andere 

35 Literatur Folien Prof. Gerndt: Parallel Programming !!!
Designing and Building Parallel Programs (Ian Foster, 1995) Parallele Programmierung mit MPI (Peter Sanders und Thomas Worsch) Using MPI (W. Gropp, A. Skjellum) Internet-Recherche Bsp:

36 GRUPPE 4

37 OpenMP Ausführungsmodell Gemeinsame und private Daten
Parallele Konstrukte Work-Sharing Konstrukte Synchronisierung OpenMP-Umgebung

38 Ausführungsmodell Basiert auf dem Fork-Join-Modell
Ein Thread wird gestartet (master thread) Weitere Threads (team) werden gestartet, wenn eine parallele Region erreicht wird Threads werden terminiert (OS), wenn die parallele Region verlassen wird Anzahl der Threads ist fest (wird beim Start des Programms mitgegeben) Alle Threads werden am Ende der parallelen Region synch. (Barrier) Master fährt fort nach Verlassen der parallelen Region

39 Direktiven Fortran C / C++ Variablen:
!$OMP directive name [parameters] C / C++ #pragma omp directive name [parameters] Variablen: private, shared, default, firstprivate, lastprivate Parallele Schleifen: Iterationen werden auf die Threads verteilt #pragma omp for [params] Parallele Sections: jede Teilsektion wird von einem Thread abgearbeitet #pragma omp sections [params] { #pragma omp section [params] #pragma omp section [params] }

40 Parallele Ein-/Asugabe
Paralleles Programm, P Prozesse pro Datei gleichzeitig Datenbanken, Multimedia, Simulationen Verfahren: Aufbau von Systemen mit paralleler E/A Verfahren zur Nutzung dieser Systeme Implemenation Striping RAID Intel PFS MPI I/O Anwendungen mit hohem E/A-Anteil portabel und effizient zu machen Daten schreiben/lesen wie send/recv

41 Performanceanalyse und Optimierung
Kurzer Ausblick auf Werkzeuge (wird in einem eigenen WWR-Modul behandelt Benchmarksuiten Programmpakete zur Messung der Leistung paralleler Systeme NAS Parallel Benchmarks (Numerische Strömungsmechanik) PARKBENCH (Kommunikationsverhalten,…) SPEC…chem, …seis, …hpc Skalierungsprobleme Bottleneckanalyse

42 Literatur Folien Prof. Gerndt: Parallel Programming !!!
Parallel Programming in OpenMP (R. Chandra, L. Dagum,…) Morgan Kaufmann Publishers 2001 Internet-Recherche Bsp:

43 GRUPPE 5

44 Literatur Praktikum: Cluster-Programmierung mit Java

45 Anleitung für Installation von MPI auf einem Linux Rechner
einführende MPI Aufgaben PingPong Ringkommunikation Zeitmessungen Jacobi/Gauss-Seidel Relaxation seq. Java Programm gegeben parallele Version erstellen GUI + RMI Kommunikation Billard Simulation 1 w, 1 s, x bunte Kugeln, Tisch, Queue sequentielle + parallele Version erstellen


Herunterladen ppt "WWR-Praktikum Parallele Programmierung"

Ähnliche Präsentationen


Google-Anzeigen