Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Software Engineering SS04 Paralleles Programmieren FH Aachen, 20.04.2004 Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo.

Ähnliche Präsentationen


Präsentation zum Thema: "Software Engineering SS04 Paralleles Programmieren FH Aachen, 20.04.2004 Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo."—  Präsentation transkript:

1

2 Software Engineering SS04 Paralleles Programmieren FH Aachen, Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo

3 Inhaltverzeichniss  Einfürung   Ansätze zur Parallelisierung  SISD  SIMD  MIMD  SPMD  Speicher Modelle  Shared Memory  Distributed Memory  SISD + SIMD Program Beispiele  Vektor addition (SISD)  Vektor addition (SIMD)  Shared Memory  Distributed Memory  Glossar  Literatur SWE SS04. Paralleles Programmieren. Perez-Otuno Rodrigo Kühnal Andrej

4 Warum Paralleles Programmieren?  Schnell Ergebniss berechnen.  Grossere Daten Mengen bearbeiten. SWE SS04. Paralleles Programmieren. Perez-Otuno Rodrigo Kühnal Andrej

5 SWE SS04. Paralleles Programmieren. Ansätze zur Parallelisierung -SIMD Konzept (parallel) -SPMD Konzept (parallel) -MIMD Konzept (parallel) -SISD Konzept (seriel) Was ist Paralleles Programmieren? Perez-Otuno Rodrigo Kühnal Andrej

6 Was ist Paralleles Programmieren? SWE SS04. Paralleles Programmieren. Speicher Modelle für paralelles Programmieren:  Distributed Memory (Cluster) – MPI – PVM  Shared memory (SMP - Symmetric Multiprocessor Systeme) – OpenMP – Threads++ – Windows API Perez-Otuno Rodrigo Kühnal Andrej

7 … … … Serielle addition (ein SISD Befehl) int* x=new int[N]; int* y=new int[N]; int* z=new int[N]; … for (I=0; I

8 … … … Parallele addition (ein SIMD Befehl) include ; // from Processor Pack for MS Visual studio I32vec4* x4=new I32vec4[N/4]; I32vec4* y4=new I32vec4[N/4]; I32vec4* z4=new I32vec4[N/4]; … for (I=0; I

9 Shared Memory Basis konzepte Beim verteiltem Speicher ( distributed memory) ist jedem Prozessor ein Teil des Speichers zugeordnet Beim verteiltem Speicher ( distributed memory) ist jedem Prozessor ein Teil des Speichers zugeordnet Beim Konzept des gemeinsamen Speichers ( shared memory)greifen alle Prozessoren auf denselben Speicher zu Beim Konzept des gemeinsamen Speichers ( shared memory)greifen alle Prozessoren auf denselben Speicher zu Klassischen Shared Memory Parallelisierung versucht das Betriebssystem, mehrere Programmteile auf verschiedenen Prozessoren gleichzeitig abzurabeiten Klassischen Shared Memory Parallelisierung versucht das Betriebssystem, mehrere Programmteile auf verschiedenen Prozessoren gleichzeitig abzurabeiten Perez-Otuno Rodrigo Kühnal Andrej

10 Shared Memory Grundlagen Allerdings verfügt jeder Prozessor zumindest über einen eigenen Cache Allerdings verfügt jeder Prozessor zumindest über einen eigenen Cache Shared Memory ist nur bei Bus--basierten Systemen und bei Cross--Bar anwendbar Shared Memory ist nur bei Bus--basierten Systemen und bei Cross--Bar anwendbar Inter--Prozessor-Kommunikation erfolgt über den Hauptspeicher selber oder spezielle Kommunikationsregister Inter--Prozessor-Kommunikation erfolgt über den Hauptspeicher selber oder spezielle Kommunikationsregister Perez-Otuno Rodrigo Kühnal Andrej

11 Shared Memory Probleme entstehen, Probleme entstehen, wenn Unterprogrammaufrufe nach dem Schema wenn Unterprogrammaufrufe nach dem Schema call sub1(einfeld,ausfelda) call sub1(einfeld,ausfeldb) call sub1(einfeld,ausfeldc) call sub1(einfeld,ausfeldd) call sub1(einfeld,ausfelde) ein Feld wie einfeld in ansonsten unabhängigen Unterprogram- maufrufen verwenden Perez-Otuno Rodrigo Kühnal Andrej

12 Shared Memory Vorteile von SMP: Gesamtsystem erscheint für jeden Prozeß wie ein Einprozessorsystem; Gesamtsystem erscheint für jeden Prozeß wie ein Einprozessorsystem; keine Programmanpassungen vorhandener Software notwendig. Die Vorteile von SMP können durch Anpassung der Software bei Bedarf dennoch genutzt werden; keine Programmanpassungen vorhandener Software notwendig. Die Vorteile von SMP können durch Anpassung der Software bei Bedarf dennoch genutzt werden; durch die gemeinsame Verwendung von Hauptspeicher und Peripheriegeräten sind SMP-Systeme recht preiswert realisierbar. durch die gemeinsame Verwendung von Hauptspeicher und Peripheriegeräten sind SMP-Systeme recht preiswert realisierbar. Perez-Otuno Rodrigo Kühnal Andrej

13 Shared Memory Nachteile von SMP: Relativ großer Overhead bei Betriebssystem und Hardware notwendig, um Einprozessor-Illusion für Applikationen zu erzeugen; Relativ großer Overhead bei Betriebssystem und Hardware notwendig, um Einprozessor-Illusion für Applikationen zu erzeugen; Hohe Auslastung des Busses oder Switches, der die Prozessoren mit gemeinsam benutztem Speicher und Peripheriegeräten verbindet; Hohe Auslastung des Busses oder Switches, der die Prozessoren mit gemeinsam benutztem Speicher und Peripheriegeräten verbindet; Der Zugriff auf von mehreren Prozessoren gemeinsam genutzte Speicherbereiche muß durch sog. Locks geregelt werden, das bedingt einen erhöhten Verwaltungsaufwand für das Betriebssystem. Der Zugriff auf von mehreren Prozessoren gemeinsam genutzte Speicherbereiche muß durch sog. Locks geregelt werden, das bedingt einen erhöhten Verwaltungsaufwand für das Betriebssystem. Perez-Otuno Rodrigo Kühnal Andrej

14 Shared Memory Open MP Open MP Thread++ Thread++ Java Threads Java Threads Perez-Otuno Rodrigo Kühnal Andrej

15 Parallelprogrammierung Warum Parallelprogrammierung? Programme, die auf externe Ereignisse reagieren müssen, sind schwierig, sequentiell zu programmieren. Programme, die auf externe Ereignisse reagieren müssen, sind schwierig, sequentiell zu programmieren. In parallelen Programmen wird die Problemstellung in Teilaufgaben zerlegt, die parallel ausgeführt werden können In parallelen Programmen wird die Problemstellung in Teilaufgaben zerlegt, die parallel ausgeführt werden können Perez-Otuno Rodrigo Kühnal Andrej

16 Thread Was ist Thread? Was ist Thread? Thread = leichtgewichtiger Prozess = Prozess, der sich mit anderen den gleichen Adressbereich(bzw. die gleiche Ausführungsumgebung) teilt = sequentieller "Kontrollflussfaden" innerhalb eines Programms Perez-Otuno Rodrigo Kühnal Andrej

17 Threads Beispiele „Parallele Programmierung“ mit Java threads mit Java threads Mit Threads++ Mit Threads++ Shared Memory interface Open MP Open MP Windows NT Windows NT Perez-Otuno Rodrigo Kühnal Andrej

18 Java Threads Für die Anwendung von „Shared Memory“ brauchen wir die grundlegenden Synchronisationskonzepte Für die Anwendung von „Shared Memory“ brauchen wir die grundlegenden Synchronisationskonzepte In Java gibt es eine Basisklasse java.lang.Thread, die einen fertigen Thread darstellt In Java gibt es eine Basisklasse java.lang.Thread, die einen fertigen Thread darstellt Perez-Otuno Rodrigo Kühnal Andrej

19 Thread ++ A New Solution to the Multi-threading Dilemma Eine C++ Klassenbibliothek, die den Umgang mit den POSIX- Threads durch die Einbettung in Klassen erleichtern soll Aktuelle Fehler hat Entwickler gezwungen zwischen 2 Optionen zu wählen: 1. threads anwenden um die Effizienz und Ausführung zu verbessern 2. versichern dass die Anwendungen betriebssicher sind Perez-Otuno Rodrigo Kühnal Andrej

20 Threads++ Threads++ löst dieses Dilemma indem es die Entwickler der multithreaded applications erlaubt diese Anwendung gründlich zu testen – ebenso wie die threads- mit einem state-of-the- art automatic runtime error-detection tool. Threads++ löst dieses Dilemma indem es die Entwickler der multithreaded applications erlaubt diese Anwendung gründlich zu testen – ebenso wie die threads- mit einem state-of-the- art automatic runtime error-detection tool. Perez-Otuno Rodrigo Kühnal Andrej

21 Open MP Application Program Interface(API) OpenMP hat sich kürzlich als ein Industirestandard interface für shared memory Programmierungen über parallele Computeranwendungen OpenMP hat sich kürzlich als ein Industirestandard interface für shared memory Programmierungen über parallele Computeranwendungen unterstützt multi-platform shared-memory parallel programming in C/C++ und Fortran unterstützt multi-platform shared-memory parallel programming in C/C++ und Fortran Perez-Otuno Rodrigo Kühnal Andrej

22 Open MP In allen Architekturen, einschließlich Unix platforms und Windows NT platforms In allen Architekturen, einschließlich Unix platforms und Windows NT platforms Es ist ein portable, scalable Modell, welches shared- memory-Programmierern ein einfaches und flexibles Interface ermöglicht um parallele Anwendungen für Plattformen (vom Desktop bis zum Supercomputer) zu entwickeln Es ist ein portable, scalable Modell, welches shared- memory-Programmierern ein einfaches und flexibles Interface ermöglicht um parallele Anwendungen für Plattformen (vom Desktop bis zum Supercomputer) zu entwickeln Perez-Otuno Rodrigo Kühnal Andrej

23 Beispiel #include #include main () { int nthreads, tid; { int nthreads, tid; #pragma omp parallel private(nthreads, tid) {tid = omp_get_thread_num(); {tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); printf("Hello World from thread = %d\n", tid); if (tid == 0) if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } } Perez-Otuno Rodrigo Kühnal Andrej

24  Distributed Memory  Einfürung  Aufteilung einer Aufge. (parallelisierung Ansatz)  MPI + PVM (SMPD Programmiermodel)  MPI programmier beispiele:  Bibiiothek initialisieren  Aufruf der MPI Funktionen SWE SS04. Paralleles Programmieren. Perez-Otuno Rodrigo Kühnal Andrej Distributed Memory Architecture

25 SWE SS04. Paralleles Programmieren. Memory 1 CPU 1 Rechner 1 Memory 2 CPU 2 Rechner 2 ………….. weitere Rechner ………….. netzwerk Einzelrechnern mit jeweils eigenem Hauptspeicher mit einem Netzwerk für Kommunikation miteinander verbunden  Relativ preiswerte Hardware (im vgl. zu SMP systemen)  Gut skalierbar  Gesamtarbeitspeicher fast beliebig gross - Kein direkter Zugriff auf die Gesamtdaten  zeitaufwendige kommunication - Aufwendig beim programmieren, debugen - speziele bibliotheken notwendig Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

26 netzwerk SWE SS04. Paralleles Programmieren. ………….. weitere Rechner ………….. Memory 1 CPU 1 Memory 23 CPU 23 Programmierer ist für die Synchronisation und Kommunikation zwischen unterschiedlichen Prozessen zustaendich. Es gibt aber Hilfsbibliotheken und Tools die, das Parralele Programieren für Distributed Memory Systemme erleichtern. Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

27 SWE SS04. Paralleles Programmieren.  PVM – Parallel Virtual Machine Ist ein Programmpaket, das es erlaubt, ein Netzwerk von heterogenen Rechnern als einen virtuellen parallelen Rechner zu benutzen. -Es ist eine einheitliche, portable Programmierbibliothek die es Programmen erlaubt Nachrichten auszutauschen. -Unterstuetzte sprachen sind C,C++,Fortran und (inofiziel) Java.  MPI – Message passing interface Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

28 MPI – Message passing interface SWE SS04. Paralleles Programmieren. Das Programm ist in einer gewönliche Sprache geschrieben (C, C++, Fortran) Beteiligte Prozesse benutzen nur lokalen Speicher Datenaustausch zwischen den Prozessen erfolgt über Nachrichtenaustausch (Send/Recv) Das gleiche Programm wird auf jeder Maschine ausgeführt SPMD - Single Program Multiple Data Memory 1 CPU 1 Memory 2 CPU 2 Memory 3 CPU 3 netzwerk hello_mpi.c Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

29 SWE SS04. Paralleles Programmieren. #include "mpi.h" int main(int argc, char* argv[] ){... // System initialisiert MPI_Init(); // jeder Knoten hat eine eindeutige Nummer // MPI-Funktionen koennen benutzt werden.... MPI_Finalize(); // MPI wurde auf allen Knoten gestoppt } MPI – Message passing interface bash# mpicc hello_mpi.c –o hello_mpi Perez-Otuno Rodrigo Kühnal Andrej Distributed Memory Architecture

30 SWE SS04. Paralleles Programmieren. #include "mpi.h" int main (int argc, char* argv[]) { // variblen declaration int myID; int numprocs; int myChromosome[1024][1024][1024]; // System initialisiert MPI_Init(); // MPI aufrufe MPI_Comm_rank ( MPI_COMM_WORLD, &myID ); MPI_Comm_size ( MPI_COMM_WORLD, &numprocs ); MPI_Finalize(); // MPI wurde auf allen Knoten gestoppt } MPI – Message passing interface bash# mpirun –np 23 hello_mpi Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

31 netzwerk SWE SS04. Paralleles Programmieren. ………….. weitere Rechner ………….. Memory 1 myid=0; numprocs=23 CPU 1 Memory 1 myid=22; numprocs=23 CPU 1 Distributed Memory Architecture Perez-Otuno Rodrigo Kühnal Andrej

32 SWE SS04. Paralleles Programmieren. Glossar 1 Perez-Otuno Rodrigo Kühnal Andrej SISD (single instruction stream, single data stream ) - Einen Prozessor und bearbeitet damit jeweils nur einen Befehl zur Zeit, erzeugt also auch nur einen Strom von Daten. SIMD (single instruction stream, multiple data stream ) - Mehrere Prozessoren führen jeweils denselben Befehl auf unterschiedlichen Daten aus MIMD (multiple instruction stream, multiple data stream) - mehrere Prozessoren führen unterschiedliche Befehle auf unterschiedlichen Daten aus SPMP (single program, multiple data ) - wobei jeder Prozessor das selbe Programm auf unterschiedlichen Daten ausführt. - Datenaustausch zwischen den Prozessen erfolgt über Nachrichtenaustausch SMP (Symmetric Multi Processing) - Arbeitet ein Rechner mit mehr als einem Prozessor, spricht man von einem Multiprozessor- oder Multiprocessing - System. Solche Systeme benutzen Shared Memory Speicher Model. MPI(Message Passing Interface) PVM(Parralell virtual maschine ) - PVM und MPI sind Softwarebibliotheken, die erlauben Message Passing Parallel programme zu schreiben, die an eim Cluster ausgeführt werden. Das sind hilfsbibliotheken für DIe Cluster programmierung. Die unterstützen als Distributed Memory Model auch Shared Memory Modell.

33 SWE SS04. Paralleles Programmieren. Glossar 2 Perez-Otuno Rodrigo Kühnal Andrej Thread - leichtgewichtiger Prozess. - erzeugen eines Threads ist schneller als erzeugen eines Process - Nebenläfige Threads von einem Prozess laufen im gleichen Adressraum. - Nebenläfige Prozesse laufen in unterschidlichen Adressräumen. Shared Memory - alle Prozessoren arbeiten mit einem gemeintsammen Speicher - Speicher zugriffe müssen synchronisiert werden Disributed Memory - Distributed Memory Systeme bestehen aus mehreren Einzelrechnern mit jeweils eigenem Hauptspeicher und Betriebssystem. - Jedes CPU kann nur auf eigene Speicher dierkt zugreifen - Zugriff auf Speicer eines anderen CPU erfolgt über das Netzwerk Hybrid Memory (Shared Memory + Disributed Memory) - Shared Memory Systeme werden mit einem netzwerk zu einem Cluser verbunden Cluster - In einem Cluster werden mehrere Rechner parallel zusammengeschaltet und arbeiten zusammen an der gleichen Arbeit. Das ist Disributed Memory System oder Hybrid Memory System.

34 SWE SS04. Paralleles Programmieren. Literatur Perez-Otuno Rodrigo Kühnal Andrej SIMD MPI Genforschung Glossar


Herunterladen ppt "Software Engineering SS04 Paralleles Programmieren FH Aachen, 20.04.2004 Prof. Dr.-Ing. Michael Trautwein Andrej Kühnal, Perez-Otuno Rodrigo."

Ähnliche Präsentationen


Google-Anzeigen