WWR-Praktikum Parallele Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
Message Passing Interface (MPI)
Advertisements

Matrixmultiplikation
Datenparallele Algorithmische Skelette in Muesli
Hochschule Fulda – FB ET Sommersemester 2010
Leistung.
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
Parallel and Cluster Computing
Beim Start eines Prozesses in Windows NT, 2000 wird a der Programmtext aus der exe-Datei ab der dort angegebenen Adresse gespeichert.
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
C Tutorium – Semaphoren –
PC-Cluster.
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
Enno Rehling und Roger Butenuth, Uni-GH Paderborn: Arminius: Software für Linux-basierte SCI-Cluster Arminius: Software für Linux-basierte SCI-Cluster.
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
SciAgents - Eine agentenbasierte Umgebung für verteilte wissenschaftliche Berechnungen Alexander StarkeSeminar Software Agenten
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
Seminar parallele Programmierung SS 2003
OpenMP Präsentation im Rahmen des Seminars
Vortrag im Rahmen des Seminars
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Linux-HA-Cluster – Heartbeat mit DRBD
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Random Heightmap on GPU
08/02/2014Orientierung Prof. Dr. Ulrich Rüde Lehrstuhl für Systemsimulation Universität Erlangen-Nürnberg Orientierung 2004 Lehrstuhl für Systemsimulation.
Mehr Qualität und schnellere Marktreife durch effiziente Softwaretests
Plattformunabhängige Programmiersprache
Duo- und Quad Prozessor-Architektur
Netzfort – Instituts-Namensraum
F.Ladstätter und R.Elsässer VP Wissenschaftliches Arbeiten und Präsentation 13. Dezember 2001.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Agenda Motivation Grundlagen der Matrix-Vektor-Multiplikation
Programmierung paralleler Algorithmen mit MPI
Systeme 1 Kapitel 4 Prozesse WS 2009/10.
Projektarbeit PHP 5.3 / MySQL & Content Management Systems
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,
High Performance Fortran Seminar Parallele Programmierung von Sebastian König und Stefan Seidel.
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
Bruno Buchberger RISC, Uni Linz Bozen, 26. September 2003
Ein Vortrag von Simon Bayer
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
Thread Synchronisation in JAVA
Betriebssysteme Übung Tutorium „System Calls & Multipgrogramming“
Multiprozessoren: Herausforderung für die Software
CuP - Java Sechste Vorlesung Entspricht ungefähr Kapitel 3. 1 – 3
Systemsoftware und Betriebssysteme
Interprozess- kommunikation (IPC)
JOMP
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München.
JAVA/DSM A Platform for Heterogeneous Computing Serge F. Possono M. Technische Universität Muenchen (TUM) Lehr- und Forschungseinheit Informatik X Rechnertechnik.
Einführung in Optimierungsprobleme auf modernen Rechnerarchitekturen
Javelin Internet-based parallel computing using Java.
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
Michael Gerndt Technische Universität München Peridot Zusammenfassung des Projektplans.
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Eine Einführung
Parallele Programmierung im.NET Framework Darmstadt, Präsentation am Beispiel von C-Sharp (C#)  Wichtige Grundlagen  Generika, Delegate, Lambda,
Copyright B. Buchberger Allgemeinbildung und Grundlagenforschung Das Kind im Bad Bruno Buchberger AHS-Direktorenbesprechung Geinberg, 28. November.
Clustering Clustering mit openMosix von Christian Wiese Stefan Krause.
Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.
Bulk Synchronous Parallel Computing
2.3 Implementierung von Prozessen
Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 1: Architektur verteilter Systeme.
PVM – Parallel Virtual Machine Michael Springmann.
Parallelising Molecular Dynamics for Message Passing Systems (complete) Martin Gerber
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
Shared Memory Programmierung: Grundlagen
 Präsentation transkript:

WWR-Praktikum Parallele Programmierung Sabine Rathmayer sabine.rathmayer@in.tum.de

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

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

GRUPPE 1

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.

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

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

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

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

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

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

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

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

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

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)

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)

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

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

GRUPPE 2

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.

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

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,…)

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

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

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.

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.

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

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

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

GRUPPE 3

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

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

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

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 

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

GRUPPE 4

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

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

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] }

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

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

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

GRUPPE 5

Literatur Praktikum: Cluster-Programmierung mit Java http://wwwbode.in.tum.de/~gerndt/home/Teaching/SS2002/Praktikum/index.html

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