Java auf Trab: Ein Toolkit für rechenintensive Apps
Die JVM wandelt Bytecode zur Laufzeit in Maschinencode für die ausführende CPU um und lässt die GPU außen vor. Das Heterogeneous Accelerator Toolkit ändert das und spannt auch die verfügbaren Beschleuniger ein.
Nahezu jeder moderne Rechner verfügt über einen oder mehrere Beschleuniger, seien es separate GPU-Karten oder integrierte Chips wie bei Apple Silicon. Ursprünglich konzipiert für Computergrafik, erledigen diese Chips mit ihren Tausenden parallel rechnenden Cores längst auch allgemeine rechenintensive Aufgaben. Vor allem im Bereich künstlicher Intelligenz ist das Ausführen und Trainieren von Modellen nur mit Beschleunigern praktikabel, mit Java aber bislang nicht ohne Weiteres möglich.
Java kompiliert Quellcode mit javac zunächst in Bytecode, den die JVM just in time (JIT) für die CPU-Architektur der Laufzeitumgebung übersetzt – meist Intel oder Arm. Für andere Architekturen wie die von Grafikprozessoren kann die JVM keinen Code direkt erzeugen. Der klassische Weg von Java zur GPU führt über das etwas umständliche Java Native Interface (JNI) oder über das Projekt Panama der OpenJDK-Initiative, das den Umgang mit nativem Code vereinfacht. Beide Varianten erfordern zum Erstellen und Kompilieren des Codes für den Beschleuniger einen Wechsel von Java zur Toolchain des jeweiligen Herstellers und eine spezifische Integration in den Sourcecode des Java-Programms, das den Code auf der GPU ausführen soll.