Upload
konstantin-giebel
View
103
Download
0
Embed Size (px)
Citation preview
Sabine Rathmayer, 11 April 2023
1
WWR-PraktikumParallele Programmierung
Sabine Rathmayer
Sabine Rathmayer, 16. April 2003 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 MPIVioleta 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/ MPIThomas Kloppe, Steffen Bergmann, Andreas Klinger, Sebastian Hans
Sabine Rathmayer, 16. April 2003 3
Kurzfristige Änderungen
Termin Projektmanagement 23.4.2003 statt 30.4.2003
Betreuung Gruppen 1, 2 und 5
Sabine Rathmayer, 16. April 2003 4
GRUPPE 1
Sabine Rathmayer, 16. April 2003 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.
Sabine Rathmayer, 16. April 2003 6
Konfigurationen
Prozessor Prozessor
Verbindungsnetz
gemeinsamer Speicher
Globaler Speicher Physikalisch verteilter Speicher
Ver
teilt
er A
dre
ßra
umG
emei
nsam
er A
dre
ßra
um
Leer
Prozessor Prozessor
Verbindungsnetz
lokalerSpeicher
lokalerSpeicher
SMP Symmetrischer Multiprozessor DSM Distributed-shared-memory-Multiprozessor
Prozessor Prozessor
Verbindungsnetz
lokalerSpeicher
lokalerSpeicher
send receive
Nachrichtengekoppelter (Shared-nothing-)Multiprozessor
Sabine Rathmayer, 16. April 2003 7
Anwendungen
Simulationen Strömungssimulationen Wettervorhersage Klimaforschung Erdbebenvorhersage Hochspannungstechnik
Datenbanken Webserver
Sabine Rathmayer, 16. April 2003 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“.
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 10
Beschleunigung und Effizienz
Beschleunigung(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).
S n T 1 T n
E n S n n
Sabine Rathmayer, 16. April 2003 11
Amdahls Gesetz
T n T 1 1 an
T 1 a
S n T 1 T n
T 1 T 1 1 a
n T 1 a
11 an
a n
1 a na
S n 1
a
a Summe der Ausführungszeit des nur sequentiell ausführbaren Programmteils
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 13
Beispiel
…
…
Paralleler Code
Sequent. Code (Programmschluss)
Sequent. Code (Initialisierung)
Sequent. Code
Paralleler Code
Sabine Rathmayer, 16. April 2003 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
Paralleler Code
Sabine Rathmayer, 16. April 2003 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)
…
…
Paralleler Code
Sequent. Code (Programmschluss)
Sequent. Code (Initialisierung)
Sequent. Code
Paralleler Code
Sabine Rathmayer, 16. April 2003 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
Paralleler Code
Sequent. Code (Programmschluss)
Sequent. Code (Initialisierung)
Sequent. Code
Paralleler Code
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 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: http://www.rz.rwth-aachen.de/hpc/compiler/parallel.html
Sabine Rathmayer, 16. April 2003 19
GRUPPE 2
Sabine Rathmayer, 16. April 2003 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.
Sabine Rathmayer, 16. April 2003 21
Parallele Programmierparadigmen
Datenparallele Programmierung: High Performance Fortran Shared Memory Ansätze
Direktiven Threads
Nachrichtenaustausch
Sabine Rathmayer, 16. April 2003 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,…)
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 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.
Sabine Rathmayer, 16. April 2003 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.
Sabine Rathmayer, 16. April 2003 27
Synchrone (blockierende) send-/receive-Befehle
csend(type, buf, len, node, pid)long type; Nachrichtennummerchar *buf; Zeiger auf Nachrichtenpufferlong len, node, pid;Nachrichtenlänge, Nummer des
Empfängerknotensund 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
beliebigeNachricht
char *buf; Zeiger auf Nachrichtenpufferlong len; Länge des Puffers
blockiert, bis die Nachricht vollständig im Empfangspuffer steht
Sabine Rathmayer, 16. April 2003 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 Informationsbefehlelong mynode() Knotennummer
long mypid() Prozeßnummer
long numnodes() Anzahl Knoten des Subcubes
long nodedim() Dimension des Subcubes
unsigned long mclock() Zeit in Millisekunden
Sabine Rathmayer, 16. April 2003 29
Literatur
Folien Prof. Gerndt: Parallel Programming !!! Designing and Building Parallel Programs (Ian Foster,
1995) Internet-Recherche
Bsp: http://www.rz.rwth-aachen.de/hpc/compiler/parallel.html
Sabine Rathmayer, 16. April 2003 30
GRUPPE 3
Sabine Rathmayer, 16. April 2003 31
Einführung in MPI
Wichtigste Konstrukte Weiterführende Themen wie asynchrone Kommunikation Kollektive Operationen Beispiele
Sabine Rathmayer, 16. April 2003 32
Historie
bis 1993 viele verschiedene Message Passing Bibliotheken (PVM, NX,PARMACS, P4,…)
Jan. 1993 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
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 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: http://www.rz.rwth-aachen.de/hpc/compiler/parallel.html
Sabine Rathmayer, 16. April 2003 36
GRUPPE 4
Sabine Rathmayer, 16. April 2003 37
OpenMP
Ausführungsmodell Gemeinsame und private Daten Parallele Konstrukte Work-Sharing Konstrukte Synchronisierung OpenMP-Umgebung
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 39
Direktiven Fortran
!$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] }
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 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
Sabine Rathmayer, 16. April 2003 42
Literatur
Folien Prof. Gerndt: Parallel Programming !!! Parallel Programming in OpenMP (R. Chandra, L. Dagum,
…) Morgan Kaufmann Publishers 2001 Internet-Recherche
Bsp: http://www.rz.rwth-aachen.de/hpc/compiler/parallel.html
Sabine Rathmayer, 16. April 2003 43
GRUPPE 5
Sabine Rathmayer, 16. April 2003 44
Literatur
Praktikum: Cluster-Programmierung mit Java http://wwwbode.in.tum.de/~gerndt/home/Teaching/SS2002/
Praktikum/index.html
Sabine Rathmayer, 16. April 2003 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