beehive-lab•Mar 28, 2025
TornadoVM
TornadoVM
!TornadoVM version
TornadoVM is a plug-in to OpenJDK and GraalVM that allows programmers to automatically run Java programs on
heterogeneous hardware.
TornadoVM targets OpenCL, PTX and SPIR-V compatible devices which include multi-core CPUs, dedicated
GPUs (Intel, NVIDIA, AMD), integrated GPUs (Intel HD Graphics and ARM Mali), and FPGAs (Intel and Xilinx).
TornadoVM has three backends that generate OpenCL C, NVIDIA CUDA PTX assembly, and SPIR-V binary.
Developers can choose which backends to install and run.
Website: tornadovm.org
Documentation: https://tornadovm.readthedocs.io/en/latest/
For a quick introduction please read the following FAQ.
Latest Release: TornadoVM 1.0.10 - 31/01/2025 :
See CHANGELOG.
Installation
In Linux and macOS, TornadoVM can be installed automatically with
the installation script. For example:
NOTE Select the desired backend:
opencl: Enables the OpenCL backend (requires OpenCL drivers)
ptx: Enables the PTX backend (requires NVIDIA CUDA drivers)
spirv: Enables the SPIRV backend (requires Intel Level Zero drivers)
Example of installation:
Alternatively, TornadoVM can be installed either
manually from source or
by using Docker.
If you are planning to use Docker with TornadoVM on GPUs, you can also
follow these guidelines.
You can also run TornadoVM on Amazon AWS CPUs, GPUs, and FPGAs following the
instructions here.
Usage Instructions
TornadoVM is currently being used to accelerate machine learning and deep learning applications, computer vision,
physics simulations, financial applications, computational photography, and signal processing.
Featured use-cases:
kfusion-tornadovm: Java application for accelerating a
computer-vision application using the Tornado-APIs to run on discrete and integrated GPUs.
Java Ray-Tracer: Java application accelerated with TornadoVM for
real-time ray-tracing.
We also have a set
of examples
that includes NBody, DFT, KMeans computation and matrix computations.
Additional Information
General Documentation
Benchmarks
How TornadoVM executes reductions
Execution Flags
FPGA execution
Profiler Usage
Programming Model
TornadoVM exposes to the programmer task-level, data-level and pipeline-level parallelism via a light Application
Programming Interface (API). In addition, TornadoVM uses single-source property, in which the code to be accelerated and
the host code live in the same Java program.
Compute-kernels in TornadoVM can be programmed using two different approaches (APIs):
a) Loop Parallel API
Compute kernels are written in a sequential form (tasks programmed for a single thread execution). To express
parallelism, TornadoVM exposes two annotations that can be used in loops and parameters: a) @Parallel for annotating
parallel loops; and b) @Reduce for annotating parameters used in reductions.
The following code snippet shows a full example to accelerate Matrix-Multiplication using TornadoVM and the
loop-parallel API:
To run TornadoVM, you need to either install the TornadoVM extension for GraalVM/OpenJDK, or run with our
Docker images.
Additional Resources
Here you can find videos, presentations, tech-articles and
artefacts describing TornadoVM, and how to use it.
Academic Publications
If you are using TornadoVM >= 0.2 (which includes the Dynamic Reconfiguration, the initial FPGA support and CPU/GPU
reductions), please use the following citation:
If you are using Tornado 0.1 (Initial release), please use the following citation in your work.
Selected publications can be found here.
Acknowledgments
This work is partially funded by Intel corporation.
In addition, it has been supported by the following EU & UKRI grants (most recent first):
EU Horizon Europe & UKRI AERO 101092850.
EU Horizon Europe & UKRI INCODE 101093069.
EU Horizon Europe & UKRI ENCRYPT 101070670.
EU Horizon Europe & UKRI TANGO 101070052.
EU Horizon 2020 ELEGANT 957286.
EU Horizon 2020 E2Data 780245.
EU Horizon 2020 ACTiCLOUD 732366.
Furthermore, TornadoVM has been supported by the following EPSRC grants:
PAMELA EP/K008730/1.
AnyScale Apps EP/L000725/1.
Contributions and Collaborations
We welcome collaborations! Please see how to contribute to the project in the CONTRIBUTING page.
Write your questions and proposals:
Additionally, you can open new proposals on the GitHub
discussions page.
Alternatively, you can share a Google document with us.
Collaborations:
For Academic & Industry collaborations, please contact here.
TornadoVM Team
Visit our website to meet the team.
Licenses Per Module
To use TornadoVM, you can link the TornadoVM API to your application which is under Apache 2.
Each Java TornadoVM module is licensed as follows:
| Module | License |
|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Tornado-API | |
| Tornado-Runtime | |
| Tornado-Assembly | |
| Tornado-Drivers | |
| Tornado-Drivers-OpenCL-Headers | |
| Tornado-scripts | |
| Tornado-Annotation | |
| Tornado-Unittests | |
| Tornado-Benchmarks | |
| Tornado-Examples | |
| Tornado-Matrices | |
| | |