Benutzer-Werkzeuge

Webseiten-Werkzeuge


javagraticule3d:native_libraries

Verwendung nativer Bibliotheken zur Steigerung der Performance bei der Ausgleichung mit JAG3D

JAG3D verwendet als Matrizenbibliothek das MatrixToolkitJava1) (MTJ), welches ein Interface für LAPACK/BLAS bereitstellt. Seit der Version 1.0 unterstützt MTJ native LAPACK/BLAS-Systembibliotheken in Form von Dynamic Link Libraries (Windows) bzw. Shared Objects (UNIX). Selbstverständlich werden auch weiterhin die nach Java portierten Versionen von JLAPACK unterstützt, jedoch erhöhen native Bibliotheken die Performance insbesondere bei großen Gleichungssystemen. MTJ priorisiert daher systemeigene Bibliotheken und nutzt die JLAPACK-Portierung als Rückfallebene.

Um das Ausgleichungspacket von JAG3D möglichst klein zu halten aber auch um den Anwender keine zu hohen Einstiegshürden bei der Einrichtung von JAG3D aufzuerlegen, greift JAG3D bei der Berechnung nicht auf ggf. vorhandene Systembibliotheken zurück. Java ist eine plattformunabhängige Sprache. Der Einsatz bzw. das Voraussetzen von installierten Systembibliotheken steht diesem Konzept somit entgegen. Aus diesem Grund arbeitet JAG3D vollständig mit Java-basierten Bibliotheken. Dennoch kann es bei einigen Anwendungen sinnvoll sein, die Performance zu steigern und auf native Bibliotheken bei der Berechnung zurückzugreifen, bspw. wenn JAG3D für eine automatisierte Auswertung eingesetzt oder auf einem Terminalserver verwendet wird. Im Folgenden soll daher kurz skizziert werden, welche Schritte für den Support von nativen Systembibliotheken notwendig sind.

Hinweis: An der Handhabung von JAG3D ändert die Verwendung der Systembibliotheken hingegen nichts!

Installation nativer Systembibliotheken

Voraussetzung für das Zurückgreifen auf Systembibliotheken ist, dass diese installiert sind. Das Netlib-Java Projekt hat für die gängigen Betriebssysteme eine kurze Anleitung2) verfasst, die beschreibt, welche Bibliotheken benötigt werden und wie diese zu beziehen sind. Insbesondere für Linux-Nutzer gestaltet sich die Installation einfach, da diese auf entsprechende Repositorien zurückgreifen können.

Anmerkung: Von mir erfolgreich getestet wurden Ubuntu und CentOS, wobei Aufgrund der älteren Bibliotheksversion bei CentOS nicht auf die im Repository angebotenen Bibliotheken zurückgegriffen wurde. Die Pakete wurden für dieses System selbst kompiliert.

Netlib-Java Wrapper für native Systembibliotheken

Die Kommunikation zwischen JAG3D und den Systembibliotheken erfolgt über sogenannte Wrapper, die zum Netlib-Java Paket gehören und u.a. über maven.org zu beziehen sind. Für die MTJ 1.0.1 Version sind folgende zusätzliche Java-Bibliotheken verfügbar:

  • netlib-native_ref-osx-x86_64-1.1-natives.jar
  • native_ref-java-1.1.jar
  • jniloader-1.1.jar
  • netlib-native_ref-linux-x86_64-1.1-natives.jar
  • netlib-native_ref-linux-i686-1.1-natives.jar
  • netlib-native_ref-win-x86_64-1.1-natives.jar
  • netlib-native_ref-win-i686-1.1-natives.jar
  • netlib-native_ref-linux-armhf-1.1-natives.jar
  • netlib-native_system-osx-x86_64-1.1-natives.jar
  • native_system-java-1.1.jar
  • netlib-native_system-linux-x86_64-1.1-natives.jar
  • netlib-native_system-linux-i686-1.1-natives.jar
  • netlib-native_system-linux-armhf-1.1-natives.jar
  • netlib-native_system-win-x86_64-1.1-natives.jar
  • netlib-native_system-win-i686-1.1-natives.jar

In Abhängigkeit des Betriebssystems und der Architektur sind die entsprechenden Bibliotheken herunterzuladen.

JAG3D mit nativen Systembibliotheken verwenden

Die zusätzlichen jar-Files von Netlib-Java müssen JAG3D noch bekannt gemacht werden. Hierzu gibt es verschiedene Möglichkeiten. Zum einen könnten die zusätzlichen Bibliotheken in der MANIFEST.MF eingetragen werden, die sich innerhalb der JAG3D.jar-Datei befindet. Beim Start von JAG3D wird diese Datei automatisch ausgelesen, um die Suchpfade zu den externen Bibliotheken zu ermitteln. Eine weitere Möglichkeit bietet der Parameter -classpath. Dieser fügt die angegebenen Verzeichnisse oder Dateien dem Suchpfad hinzu und startet dann die main-Methode der Hauptklasse. Vorteil ist, dass die JAG3D.jar hierzu nicht verändert werden muss.

Im Downloadpaket von JAG3D befinden sich alle mitgelieferten Bibliotheken im Verzeichnis libs. Werden die zusätzlichen jar-Files von Netlib-Java im Verzeichnis addlibs gespeichert, so kann JAG3D über die Kommandozeile bzw. ein Shell-Script wie folgt gestartet werden:

JAG3D_native.sh
#! /bin/sh
java -classpath addlibs/*:libs/*:* -Xms200m -Xmx500m com.derletztekick.geodesy.jag3d.v3.gui.JAG3D

Weitere Suchpfade können hinzugefügt werden und sind unter Linux/Solaris durch einen Doppelpunkt3) und unter Windows durch ein Semikolon4) voneinander zu trennen.

JAG3D_native.cmd
java -classpath addlibs/*;libs/*;* -Xms200m -Xmx500m com.derletztekick.geodesy.jag3d.v3.gui.JAG3D

Der Stern als Wildcard bezieht alle jar-Dateien ein, die sich im angegeben Verzeichnis befinden. Sollten Bibliotheken nicht die Standardextension besitzen, so müssen diese explizit angegeben werden. Da auch die Datei JAG3D.jar mit im Suchpfad liegt, kann die darin enthaltene Java-Klasse explizit gestartet werden. Die beiden Optionen zur Erhöhung der Speicherreservierung sind obligatorisch und können bei Bedarf angepasst bzw. weggelassen werden.

javagraticule3d/native_libraries.txt · Zuletzt geändert: 01.03.2014 19:26 von Michael Loesler