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.
- JĂĽrgen Schuck
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.
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 .
Das war die Leseprobe unseres heise-Plus-Artikels "Schnellere Apps, Teil 1: Wie TornadoVM Java-Code auf GPUs beschleunigt". Mit einem heise-Plus-Abo können sie den ganzen Artikel lesen und anhören.