Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

JOMP 2 JOMP – OpenMP for Java Überblick: JOMP und OpenMP JOMP –Warum und Wofür –Preprocessor –Syntax und Anweisungen –Library Methoden.

Ähnliche Präsentationen


Präsentation zum Thema: "JOMP 2 JOMP – OpenMP for Java Überblick: JOMP und OpenMP JOMP –Warum und Wofür –Preprocessor –Syntax und Anweisungen –Library Methoden."—  Präsentation transkript:

1 JOMP

2 2 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

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

4 4 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 – Warum und Wofür?

5 5 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

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

7 7 JOMP – Anweisungen for und ordered //omp for [nowait] [reduction( : )] //omp [schedule(, [chunk-size])] [ordered] Beispiel: //omp parallel shared(a,b) { //omp for for (i=1; i

8 8 JOMP – Anweisungen single //omp single [nowait] master //omp master barrier //omp barrier only //omp only

9 9 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

10 10 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

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

12 12 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

13 13 JOMP – Performance Anweisungguidef90Jomp PARALLEL PARALLEL + REDUCTION DO/FOR PARALLEL DO/FOR BARRIER SINGLE CRITICAL LOCK/UNLOCK ORDERED Vergleich des Overheads der Synchronisationskonstrukte

14 14 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

15 15 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] ); }

16 16 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 // shared 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

17 17 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

18 18 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


Herunterladen ppt "JOMP 2 JOMP – OpenMP for Java Überblick: JOMP und OpenMP JOMP –Warum und Wofür –Preprocessor –Syntax und Anweisungen –Library Methoden."

Ähnliche Präsentationen


Google-Anzeigen