Parallelisierung für Multiprozessor-Maschinen Teil 2.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
DO...WHILE Anweisung.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Parallel Matrix Multiplication
Parallel Programming Condition Queues
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Variablenkonzept Klassisch, in Java Basistyp
Optimale Ursprungsgerade
Objectives Verstehen was unterDelegate verstanden wird
EPROG Tutorium #6 Philipp Effenberger
Arrays und ArrayLists In JAVA.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Parallelisierung für Multiprozessor-Maschinen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Arrays und ArrayLists In JAVA.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs Übung Besprechung der Hausaufgabe
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Java Programme nur ein bisschen objektorientiert.
Implementieren von Klassen
 Präsentation transkript:

Parallelisierung für Multiprozessor-Maschinen Teil 2

Abstract Inner-Loop Threading Loop Printing Multiprozessor Skalierung

Inner-Loop Threading public float[][] getValues() { for (int i = 0; i < 360; i++) lookupValues[j][i] = 0; for (int j = 1; j < 1000; j++) { for (int i = 0; i < 360; i++) { float sinValue = (float)Math.sin(i % 360) * Math.PI/180.0); lookupValues[j][i] = sinValue * (float)i / 180.0f; lookupValues[j][i] += lookupValues[j-1][i] * (float) j / 180.0f; } } return lookupValues; } j : read-only Variable lookupValues : shared Variable sinValue, i : loop-private Variablen

Überlegungen: Wahl des Loop-Scheduler: abhängig vom verwendeten Algorithmus in der Schleife Wie oft werden Threads erzeugt und wieder zerstört? Schadet oder nützt die Anwendung von Threads in diesem Fall? static oder chunk Scheduler Für jeden Durchlauf der äußeren Schleife -> sehr oft Sie schadet, sofern wir nicht einen Mechanismus implementieren, der dem ständigen Erzeugen und Zerstören der Threads ausweicht.

Der bisherige Loop-Handler Für jede neue Schleife ist eine neue Instanz notwendig. Der Schleifen-Index kann nicht zurückgesetzt werden. Ebenso kann der maximale Schleifen-Index nicht verändert werden. Kann also nur einmal verwendet werden. Der Pool-Loop-Handler Verwendet die ThreadPool-Klasse. Implementiert zwei Methoden reset() und setRange() um eine Wiederverwendbarkeit sicherzustellen.

Die Methode loopProcess() public void loopProcess() { /* aus LoopHandler.java */ for (int i = 0; i < numThreads; i++) { lookupThreads[i] = new Thread(this); lookupThreads[i].start(); } for (int i = 0; i < numThreads; i++) { try { lookupThreads[i].join(); } catch(Exception e) {} } } public void loopProcess() { /* aus PoolLoopHandler.java */ reset(); for (int i = 0; i < numThreads; i++) { poolThreads.addRequest(this); } try { poolThreads.waitForAll(); } catch(Exception e) {} } für jeden Aufruf von loopProcess() werden neue threads erzeugt. für jeden Aufruf von loopProcess() werden nur neue „Aufträge“ auf schon bestehende Threads verteilt.

Wann verschlechtert die Parallelisierung von Inner Loops die Programmperformance? Anstatt des PoolLoopHandlers wird der LoopHandler verwendet. die Inner Loop besitzt relativ zur Outer Loop eine nur sehr kurze Laufzeit. Wann sollte man auf die Parallelisierung verzichten? Wenn der verwendete Algorithmus es zuläßt, eine der folgenden Techniken zu verwenden: Loop Distribution, Loop Isolation und Loop Interchange

Loop-Printing In einer parallelisierten Schleife, sollen Daten an die Java Konsole oder eine Datei ausgegeben werden. Probleme: Der Erhalt der Reihenfolge der ausgegebenen Daten. Flaschenhals der Konsole oder Datei: da nicht mehrere Daten gleichzeitig geschrieben werden können, muss jeder Thread warten, bis er an der Reihe ist, die Ausgabe zu tätigen. Dies führt dazu, dass wertvolle Rechenzeit durch Warten verloren geht.

Überlegung: Wenn in einem Schleifenschritt die Ausgabe nur einen sehr kurzen Teil der eigentlichen Berechnungszeit in Anspruch nimmt, spricht nichts gegen eine Parallelisierung. Einzig noch zu lösendes Problem: Die Erhaltung der richtigen Reihenfolge der Ausgabe. Problemlösung: Einführung einer eigenen Klasse, die die Ausgabe übernimmt.

Der LoopPrinter Implementiert einen 2-Schritt Ausgabe-Prozess: Der Thread schreibt nicht direkt auf die Konsole oder in die Datei, sondern in ein virtuelles im Speicher befindliches Ausgabewerk (LoopPrinter) Wenn die Schleife vollständig abgearbeitet ist, geschieht die eigentliche Ausgabe.

LoopPrinter lp = new LoopPrinter(1000); public void loopDoRange(int start, int end) { for (int i = start; i < end; i++) { lp.print(i, „Ausgabe“); } } lp.send2Stream(System.out); Verwendung der LoopPrinter-Klasse

public class LoopPrinter { private Vector pStorage[]; public LoopPrinter(int initSize) { pStorage = new Vector[initSize]; } public synchronized void print (int index, Object obj) { pStorage[index].addElement( obj.toString() ); } public synchronized void send2Stream(PrintStream ps) { for (int i = 0; i < pStorage.length; i++) { Enumeration e = pStorage[i].elements(); while (e.hasMoreElements()) { ps.print(e.nextElement()); } } } }

Multiprozessor Skalierung Begriffserklärung: Der Begriff der Skalierbarkeit einer parallelisierten Anwendung sagt aus, wieviel Prozessoren hinzugefügt werden können, um immer noch einen Geschwindigkeitszuwachs zu erzielen.

Faktoren, die die Skalierbarkeit beeinflussen: Setup-Zeit Die Zeit, die aufgewendet werden muss, um jene Programmzeilen abzuarbeiten, die nicht parallelisiert sind. Synchronisation Bei jeder Parallelisierung von Programmteilen, entsteht Code, der relativ zeitaufwendig synchronisiert werden muss. Serialisation Methoden, die synchronisiert sind, können nur sequentiell abgearbeitet werden. Implementierung der Java Virtual Machine

Amdahls Gesetz: Durch folgende Formel ist die maximale Skalierbarkeit einer Anwendung bestimmbar: S = (1 - F) + F / N S... Skalierbarkeit F... Prozent des Codes, der parallelisiert ist N... Anzahl der Prozessoren Beispiel: 95% des Codes ist parallelisiert, 8 Prozessoren stehen zur Verfügung. S = ( ) /8 S = 16.8% Das bedeutet: Der parallelisierte Code wird in 16.8% der Zeit eines nicht parallelisierten Programms ausgeführt.

Skalierbarkeit der Simple Loop Handler: 1. Wert: 500 Zeilen, 1000 Spalten 2. Wert: 1000 Zeilen, 500 Spalten

Skalierbarkeit der Inner Loop Handler: 1. Wert: 100 Zeilen, 5000 Spalten 2. Wert: 500 Zeilen, 1000 Spalten

Skalierbarkeit der Loop Printer Klasse: 1. Wert: 200 Iterationen mit 200 Zeilen, 1000 Spalten, wobei jede 100ste Zeile eine Ausgabe erfolgt. 2. Wert: eine Ausgabe erfolgt jede 20ste Zeile

Danke für Ihre Aufmerksamkeit. Für weitere Fragen stehe ich gerne zu Ihrer Verfügung: