Schnellere Apps, Teil 1: Wie TornadoVM Java-Code auf GPUs beschleunigt

Damit CPU- und GPU-Cores eine App schneller machen, muss sie für paralleles Ausführen programmiert sein. Für Java-Apps macht TornadoVM die Sache beherrschbar.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Lesezeit: 15 Min.
Von
  • Jürgen Schuck
Inhaltsverzeichnis

Seit Version 8 gibt es in Java die Stream API zum parallelen Ausführen von Code auf den Cores der CPU. Die Cores von Beschleunigern wie GPUs sind außen vor geblieben, obwohl sie mit ihren vielen Kernen viel Rechenleistung bieten. Allerdings ist der Bytecode, den die Java VM auf der CPU ausführt, für alle Cores derselbe, sodass sich die API nur um die Koordination der Streams kümmern muss.

Die GPU-Cores gängiger Hersteller wie Nvidia, Intel und Apple erfordern hingegen eine Sonderbehandlung, da darauf keine Java VMs laufen, weil es keine dafür gibt. Sie verfügen jedoch über APIs, mit denen sich Code auf die GPU übertragen und ausführen lässt. Diese APIs sind wie die Beschleuniger proprietär und einigermaßen kompliziert anzuwenden, weshalb sie es bislang nicht auf die Kandidatenliste für Java-Features geschafft haben.

Mehr zum Thema Softwareentwicklung
Jürgen Schuck

Jürgen Schuck ist Mitarbeiter der Materna Information & Communications SE und als Projektleiter im Bereich Cloud Technology Consulting tätig.

TornadoVM ist ein Java-Plug-in für OpenJDK und andere Distributionen, das es ermöglicht, Programme auf den Cores von CPU und GPU parallel auszuführen. Es wandelt zur Laufzeit Java-Bytecode in OpenCL C, PTX oder SPIR-V um, die es anschließend in Binärcode für den passenden Accelerator just in time (JIT) übersetzen. Welcher oder welche das sind, entscheidet die Konfiguration. TornadoVM lädt den übersetzten Code auf den Accelerator, koordiniert die ausgeführten Compute-Kernels und kümmert sich um das Memory-Management zwischen Accelerator und Java .