Benutzer-Werkzeuge

Webseiten-Werkzeuge


se:parallelrechner

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

se:parallelrechner [2008-12-31 19:13]
stefan
se:parallelrechner [2014-04-05 11:42]
Zeile 1: Zeile 1:
-====== Parallelrechner ====== 
  
-===== Klausur ===== 
-  * Codeabschnitte verifizieren 
-  * Online-Learning anschauen 
-  * Programm als Lückentext 
-  * Verstehen der wichtigsten Funktionen (send/recv) 
-  * Architekturen verstehen (Shared Memory etc.)  ​ 
-  * Metriken verstehen, Metriken (Formeln) für neue Topologie entwickeln 
-  * Leistungsbewertung (Gesetze Amdahl etc.)  
-  * keine virtuellen Topologien 
-  * OpenMP eher allgemein (Kombination mit MPI) 
-  * Matrizenrechnung fliegt raushttp://​wiki.stefan-macke.com/​doku.php/​se:​parallelrechner 
-  * Bibliotheken für Parallelrechner nur oberflächlich ​     ​ 
-  * Leseempfehlung 
-    * Gesetze Amdahl etc. 
-    * MPI-Standard 
- 
-Lehrbrief ist erlaubt! 
- 
-===== Online-Kurs ===== 
- 
-==== Einstieg in parallele Programmierung ==== 
-  * Voraussetzungen für effektive Parallelisierung 
-    * schnelle Verbindung zwischen Prozessoren und Speicher und den einzelnen Prozessen, sowie schnelle Datenübertragung in und aus dem Speicher 
-    * Protokoll für Interprozesskommunikation 
-    * die Algorithmen müssen parallelisierbar sein und in kleine Teilprobleme aufgeteilt werden können 
-    * Mechanismus zur Verteilung der Aufgaben an die Prozesse 
-  * Computerarchitekturen nach Flynn 1972 
-    * Single Instruction Single Data (SISD) 
-    * Multiple Instruction Single Data (MISD) 
-    * Single Instruction Multiple Data (SIMD) 
-      * 1 CPU zur Steuerung und mehrere CPUs mit eigenem Speicher 
-      * Steuer-CPU sendet Broadcasts und die anderen CPU rechnen, abhängig von konditionalen Bedingungen im Code 
-      * Nachteil: viele CPUs bleiben idle 
-    * Multiple Instruction Multiple Data (MIMD) 
-      * jede CPU hat übernimmt sowohl Steuerung als auch Berechnung 
-      * Programme werden von jeder CPU unabhängig von den anderen ausgeführt -> asynchron 
-      * 3 Typen: shared memory (CPUs teilen sich gemeinsamen Speicher), distributed memory (Knoten, die zusammen ein Problem lösen) und SMP (Kombination der beiden vorherigen) 
-  * Shared-Memory MIMD 
-    * Verbindung zwischen CPUs und Speicher via Bus oder Switch 
-    * {{:​se:​shared_mimd.jpg|}} 
-    * CPUs haben zusätzlich internen Speicher: Register und Cache 
-    * Problem bei Verwendung von Cache: Variablen haben nach Änderung durch anderen Prozess vielleicht falschen Wert -> Protokoll wird benötigt zum Ermitteln solcher Fälle 
-  * Distributed-Memory MIMD 
-    * jede CPU hat eigenen Speicher -> Menge von Knoten ergeben den gesamten Parallelrechner 
-    * {{:​se:​mimd.jpg|}} 
-    * da kein Zugriff auf den Speicher der anderen Knoten besteht, müssen geeignete Programmiertechniken verwendet werden, um den Prozessen den Zugriff zu ermöglichen 
-  * SMP Cluster 
-    * Symmetric Multi-Processing 
-    * Netzwerk (-> distributed) aus shared memory Clustern 
-    * Beispiel: Earth Simulator 
-  * Modelle paralleler Programmierung 
-    * message passing model 
-      * Prozesse kommunizieren über Nachrichten 
-      * der Programmierer steuert die Aufteilung der Daten und der Berechnung auf die Prozesse und deren Kommunikation 
-      * wird hauptsächlich bei verteilten Systemen angewendet 
-      * MPI ist der Standard für message passing -> kann auch auf shared memory clustern laufen, schöpft dort aber nicht die Zugriffe auf das shared memory aus 
-    * directives-based data-parallel model 
-      * serieller Code wird durch Quelltextkommentare parallelisiert,​ die den Compiler anweisen, wie er die Daten und Berechnung zu verteilen hat 
-      * Details der Verteilung werden dem Compiler überlassen 
-      * üblicherweise auf shared memory Systemen verwendet 
-      * OpenMP ist ein Standard, ein weiterer ist High Performance Fortran (HPF) 
-      * die Direktiven werden hauptsächlich verwendet um Schleifen zu parallelisieren (small-scale parallelization),​ während MPI auf Programmebene parallelisiert (large-scale) 
-    * Kombination von MPI und OpenMP 
-      * kann Vorteile beider Systeme vereinen: shared memory access und message passing zwischen Nodes 
-  * Design paralleler Programme 
-    * parallele Programme bestehen aus mehreren Instanzen serieller Programme, die über Bibliotheksfunktionen kommunizieren,​ die sich wie folgt einteilen lassen: 
-      * initialize, manage, terminate -> Start der Kommunikation,​ Anzahl der Prozesse ermitteln, Subgroups erstellen 
-      * point-to-point:​ send/​receive zwischen Prozesspaaren 
-      * Kommunikation zwischen Prozessgruppen -> Synchronisation,​ verteilte Berechnung 
-      * Erstellen von Datentypen 
-    * Dekomposition des Problems 
-      * domain decomposition / data parallelism 
-        * Problem lässt sich durch serielle Abarbeitung von mehreren Aufgaben auf mehreren Datenbereichen lösen 
-        * Daten werden aufgeteilt und an die verschiedenen Prozesse verteilt und berechnet, hin und wieder müssen die Prozesse Daten austauschen 
-        * Vorteil: nur ein Steuerungsfluss -> Single Program Multiple Data (SPMD) 
-        * anwendbar, wenn sich Daten leicht auf verschiedene Bereiche aufteilen lassen (z.B. Lösen von Differentialgleichungen) 
-      * functional decomposition / task parallelism 
-        * besser als domain decomposition,​ wenn die Berechnung der einzelnen Teilbereiche der Daten unterschiedlich lange dauert -> alle warten auf den langsamsten Prozess 
-        * Problem lässt sich als Abarbeitung von mehreren Aufgaben gleichzeitig lösen 
-        * implementiert als Client-Server-Modell 
-    * Load Balancing 
-      * Arbeit wird gleichmäßig auf die Prozesse verteilt, damit keine idle sind 
-      * einfach, wenn die gleichen Aufgaben auf mehreren Datenbereichen durchzuführen sind 
-    * Ausführungszeit 
-      * 3 Komponenten wirken sich auf die Ausführungszeit aus 
-        * Berechnungszeit:​ die Zeit, die nur für die Berechnung des Problems verwendet wird 
-        * Wartezeit: Zeit, die ein Prozess auf einen anderen wartet (Beispiel: zentralisierte Kommunikation) 
-        * Kommunikationszeit:​ Zeit, die zum Senden und Empfangen von Nachrichten gebraucht wird (Latenz ist die Zeit um die Kommunikation vorzubereiten,​ Bandbreite ist die Übertragungsgeschwindigkeit),​ muss minimiert werden, da sie Overhead im Vergleich zu serieller Bearbeitung darstellt 
-    * Prozesswartezeit verringern 
-      * latency hiding: Prozess bekommt andere Aufgaben, während er auf die Antwort eines anderen Prozesses wartet 
-      * asynchrone Kommunikation 
se/parallelrechner.txt · Zuletzt geändert: 2014-04-05 11:42 (Externe Bearbeitung)