JaMP ist eine Implementierung des bekannten OpenMP Standard für Java.
JaMP erlaubt es (unter anderem) Schleifen zu parallelisieren, ohne sich
mit der low-level Thread API von Java befassen zu müssen. Eine parallele
Schleife hätte in JaMP folgende Form:class Test {
...void foo(){
......//#omp parallel for
......for (int i=0;i<N;i++) {
.........a[i] = b[i] + c[i]
......}
...}
}
JaMP implementiert im Moment die Funktionalität von OpenMP 2.0 und Teile
der Spezifikation 3.0 (z.B. die collapse clause).
Die aktuelle JaMP Version erzeugt reinen Java Code und ist auf jeder
JVM (ab Java 1.5)
lauffähig. Die neueste Version kann sogar CUDA-fähige Hardware zur
Ausführung von
Schleifen verwenden, wenn der Schleifenrumpf eine Transformation
nach CUDA möglich macht. Ist die Transformation nicht möglich, wird
nebenläufiger Code für gängige Multicore-Prozessoren erzeugt.
JaMP unterstütz auch die gleichzeitige Nutzung von mehreren Maschinenund
Acceleratoren.
Dieses wurde durch die Entwicklung von zwei Abstraktionsbibliotheken
ermöglicht.
Die untere Abstraktionsschicht bietet abstrakte Recheneinheiten, die
von den eigentlichen
Berechnungseinheiten wie CPUs und GPUs und ihrem Ort in einem
Rechnerbündel abstrahieren.
Eine weitere Abstraktionsschicht baut auf dieser Schicht auf und
bietet Operationen zur Verwaltung partitionierter und replizierter Arrays.
Ein partitioniertes Array wird dabei automatisch über die abstrakten
Berechnungseinheiten verteilt, wobei die Geschwindigkeiten der
einzelnen Berechnungseinheiten berücksichtigt werden.
Welcher abstrakte Array-Typ für ein Array in einem Java-Programm konkret
eingesetzt wird, wird vom JaMP-Übersetzer bestimmt, der erweitert wurde,
um ein Programm entsprechend zu analysieren.
Im Jahr 2015 wurde das Task-Konzept (OpenMP 3.0) in JaMP integriert.
Dadurch lassen sich rekursive Algorithmen mit JaMP parallelisieren.