OpenMP/Java

Projektleitung:Philippsen, M.
Zeitraum:1. Oktober 2009 - 1. Oktober 2015
Mitarbeiter:Veldema, R.; Dotzler, G.; Blaß, T.
Beschreibung:

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.

Java/OpenMP:

  • JaMPCuda-2015-01-16.tar.gz Last Update: 2015-01-16
  • JaMPCudaJar.tar.gz Version without the source code. Last Update: 2010-07-21
  • This is the first version of Java/OpenMP that is pure Java (no Jackal), and as such is suitable for running on a normal JVM.This version is special in that it allows parallel regions to be executed (transparently) on a CUDA capable graphics card for more speed. You may need to tune the included setup script to adapt to your environment. This release is Linux only.
  • Note that the Cuda version also runs without having a GPU. In this case, temporarily install Cuda to satisfy the install script. Then install per the instructions. To run without Cuda (using your normal multicore CPU), start the application as normal without the CudaClassloader.
  • To set the number of cores/threads used you can do one of: (1) set the JAMP_NUM_THREADS property (2) call Omp.omp_set_num_threads(num_threads); There was code to automatically detect the number of cores used, but it isn't 100% reliable/portable.
  • Please drop me an email if these links do not work.

Cluster-Java/OpenMP: March 2013 (experimental)

  • jamp-dist-2013-04-04.tgz
  • This version supports multiple GPUs and machines. It is, however, more experimental than the older version.

GPU-GC: a garbage collector for GPU code for a Java like parallel language.

watermark seal