JOMP wittmann@in.tum.de.

Slides:



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

der Universität Oldenburg
der Universität Oldenburg
Einführung in die Programmierung Ausführbare Klassen
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Zusammenfassung des Kapitels 8
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Threads Richard Göbel.
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Verzweigung oder bedingte Anweisung Weiter mit PP.
IF-ELSE-IF-Ketten Weiter mit PP..
Erweiterte Zuweisungskompatibilität
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.
FOR Anweisung.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
DO...WHILE Anweisung.
OpenMP Präsentation im Rahmen des Seminars
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Programmieren mit JAVA
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
Portierung von Java nach C
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Bestimmung des ggT zweier Zahlen
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einführung in die Programmiersprache Java
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
Parallel Matrix Multiplication
Ein Vortrag von Simon Bayer
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Starten der Entwicklungsumgebung (IDE)
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.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Javelin Internet-based parallel computing using Java.
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
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.
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Parallel Programming OpenMP und JOMP
Einführung in Java PING e.V. Weiterbildung Andreas Rossbacher 24. März 2005.
Vererbung.
Mit der Turtle Java Programmieren
Grundkurs Informatik mit Java
Schleifen mit der Turtle
Mit Java die Turtle steuern
Implementieren von Klassen
 Präsentation transkript:

JOMP wittmann@in.tum.de

JOMP – OpenMP for Java Überblick: JOMP und OpenMP JOMP Warum und Wofür Preprocessor Syntax und Anweisungen Library Methoden Unterschiede zum C/C++-Standard Performance Beispiel Fazit und Ausblick

JOMP – OpenMP for Java JOMP ist eine Implementierung des C/C++ und FORTRAN-OpenMP-Standards OpenMP besteht aus: Sammlung von Anweisungen, Library Routinen und Umgebungsvariablen Betonung liegt auf Performance und Skalierbarkeit arbeitet mit fine- oder coarse-grain Parallelismus spezifiziert keine Konzepte wie Data Distribution Control, etc.

JOMP – Warum und Wofür? JOMP entstand an der University of Edinburgh in Schottland, UK verbindet die Vorteile von Java (Portabilität, Ease-Of-Use, autom. Garbage Collection) mit der parallelen Programmierung ist keine wirkliche Erweiterung der Sprache Vorteile eines anweisungsbasierten Systems im Vergleich zu nativen Threads: einfacher zu „warten“ Effizienz (1 Thread/Prozessor, Barrier)

JOMP – ein Preprocessor Ist komplett in Java geschrieben worden Anweisungen werden in Source Code eingebaut und vom Preprocessor in native Threads umgewandelt Syntax: Orientiert sich an OpenMP: Form einer Anweisung: //omp <directive> <clauses>

JOMP – Anweisungen parallel //omp parallel <statement> Beispiel: //omp parallel shared(a,n) private(myid,i) //omp reduction (+:b) { myid = OMP.getThreadNum(); for( i=0; i<n; i++){ b += a[myid][i] }

JOMP – Anweisungen for und ordered //omp for [nowait] [reduction(<operator>:<vars>)] //omp [schedule(<mode>, [chunk-size])] [ordered] Beispiel: //omp parallel shared(a,b) { //omp for for (i=1; i<n; i++){ b[i] = (a[i] + a[i-1]) * 0.5; }

JOMP – Anweisungen single //omp single [nowait] master //omp master barrier //omp barrier only //omp only <statement>

JOMP – Library Methoden getNumThreads() – Anzahl der Threads in paralleler Region setNumThreads(n) – Anzahl der Threads in paralleler Region festlegen getMaxThreads() – Anzahl Threads in zukünftiger paralleler Region getThreadNum() – Zahl des laufenden Threads getNumProcs() – maximale Anzahl von Prozessoren für ein Programm inParallel() – true wenn parallel ausgeführt wird setDynamic() – dynamische Anpassung Anzahl Threads ein-/ausschalten setNested() – nested Parallelismus ein-/ausschalten getNested() – true wenn OMP-Impl. Nested Parallelismus unterstüzt

JOMP – Unterschiede zu C/C++ threadprivate wäre nur bei statischen Klassen möglich => unattraktiv atomic wäre lediglich Synonym für critical-Anweisung flush setzt Zugriff auf spezielle Instruktionen voraus => nicht implementiert Arrayreduktionen sind erlaubt Anzahl der Prozessoren ermitteln wäre Systemaufruf => wird nicht implementiert

JOMP – Performance SUN HPC 6500 (18 400MHZ, à 8MB 2nd Lvl Cache), JDK 1.2.1-04 mpiJava: MPICH 1.1.2 100 redblack Iterationen auf einem 1000x1000-Feld

JOMP – Performance Schlussfolgerungen: Handgeschriebene JavaThreads liefern bestes Ergebnis JOMP zeigt geringfügig schlechtere Ergebnisse JOMP skaliert gut mpiJava zeigt starke Superlinearität bis zu 8 CPUs mpiJava skaliert schlechter bei mehr als 8 CPUs Java-Versionen erreichen Hälfte der Performance der Fortran OpenMP-Version

JOMP – Performance Anweisung guidef90 Jomp PARALLEL 78.4 34.4 PARALLEL + REDUCTION 166.5 58.4 DO/FOR 42.3 24.6 PARALLEL DO/FOR 87.2 42.9 BARRIER 41.7 11.0 SINGLE 83.0 1293 CRITICAL 11.2 19.1 LOCK/UNLOCK 12.0 20.0 ORDERED 12.4 47.0 Vergleich des Overheads der Synchronisationskonstrukte

JOMP – Performance Schlussfolgerungen: JOMP schlägt guidef90 um Längen Overheads der Locking-Synchronisation ist in JOMP höher (folgt aus Java synchronized blocks) Resultate mit Vorbehalt betrachten, da Microbenchmarks teilweise seltsame Resultate mit JIT demonstrieren können

JOMP – Beispiel (example.jomp) import jomp.runtime.*; public class example{ public static void main (String args[]){ int [] a = new int [10]; int [] b = new int [10]; int [] c = new int [10]; int i; for (i = 0; i < b.length; i++){ b[i] = i + i + 1; c[i] = b[i] + 1; } int n; n = 9; //omp parallel private(i) { //omp for for (i = 0; i <= n; i++){ a[i] = b[i] + c[i]; System.out.println(a[0] + ", " + a[1] );

JOMP – Beispiel (example.java) // OMP PARALLEL BLOCK BEGINS { omp_Class0 __omp_Object0=new_omp_Class0(); // shared variables __omp_Object0.n = n; __omp_Object0.c = c; __omp_Object0.b = b; __omp_Object0.a = a; __omp_Object0.args = args; // firstprivate variables try { jomp.runtime.OMP.doParallel(__omp_Object0); } catch(Throwable __omp_exception) { System.err.println("OMP Warning: Illegal thread exception ignored!"); System.err.println(__omp_exception); } // reduction variables n = __omp_Object0.n; c = __omp_Object0.c; b = __omp_Object0.b; a = __omp_Object0.a; args = __omp_Object0.args; // OMP PARALLEL BLOCK ENDS

JOMP – Beispiel (example.java) // OMP PARALLEL REGION INNER CLASS DEFINITION BEGINS private static class __omp_Class0 extendsjomp.runtime.BusyTask { // shared variables int n; int [ ] c; int [ ] b; int [ ] a; String [ ] args; // firstprivate variables // variables to hold results of reduction public void go(int __omp_me) throws Throwable { // firstprivate variables + init // private variables int i; // reduction variables, init to default {// OMP USER CODE BEGINS { // OMP FOR BLOCK BEGINS ... for( i = (int)__omp_ChunkData1.start; i < __omp_ChunkData1.stop; i+= __omp_ChunkData1.step) { // OMP USER CODE BEGINS { a[i] = b[i] + c[i]; } // OMP USER CODE ENDS // OMP PARALLEL REGION INNER CLASS DEFINITION ENDS

JOMP – Fazit und Ausblick Nur geringfügige Änderungen zum C/C++-Standard Nur kleiner Overhead im Vergleich zum handgeschriebenen Java-Thread-Programm Komplette Spezifikation wird wohl bald veröffentlicht werden Kleine Teile der Spezifikation bleiben noch zu implementieren