Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

beehive-lab/TornadoVM

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

TornadoVM

Build on [push]

API Version Runtime Version SDKMAN!

TornadoVM version Contributor Covenant License: Apache 2 License: GPL v2

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 2.2.0 - 17/12/2025 : See CHANGELOG.


1. Quick Start - Install & Use the TornadoVM SDK

Prerequisites

  • JDK 21 (or GraalVM based on JDK 21)
  • GCC/G++ >= 13.0
  • C toolchain / build tools (for native parts, depending on backend)
  • OpenCL Headers, CUDA Toolkit

Note: Make sure JAVA_HOME points to your JDK/GraalVM 21 installation.

Install TornadoVM (via SDKMAN!)

TornadoVM is distributed through our official website and SDKMAN!. Install a version that matches your OS, architecture, and accelerator backend.

All TornadoVM SDKs are available on the SDKMAN! TornadoVM page.

You can choose a backend-specific build:

Backend SDKMAN! Latest Version
OpenCL 2.2.0-opencl (default)
PTX 2.2.0-ptx
SPIR-V 2.2.0-spirv
All Backends 2.2.0-full

Install TornadoVM:

sdk install tornadovm <version>

Verify Available Devices

Check that TornadoVM can detect your CPU/GPU accelerators and that all required drivers are installed:

tornado --devices

This command lists all supported devices available on your system.

Optional: Containers and Cloud

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.

2. 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:

  • GPULlama3.java: GPU-accelerated Llama3.java inference in pure Java using TornadoVM.
  • 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.

Run your First TornadoVM Program

You can run a Matrix-Vector example by adapting the classpath to point to your TornadoVM version:

Unix (Linux/macOS)

java @$TORNADOVM_HOME/tornado-argfile -cp $TORNADOVM_HOME/share/java/tornado/tornado-examples-2.2.0.jar uk.ac.manchester.tornado.examples.compute.MatrixVectorRowMajor

Windows (10+)

java @%TORNADOVM_HOME%\tornado-argfile -cp %TORNADOVM_HOME%\share\java\tornado\tornado-examples-2.2.0.jar uk.ac.manchester.tornado.examples.compute.MatrixVectorRowMajor

We also have a set of examples that includes NBody, DFT, KMeans computation and matrix computations.

Additional Information

3. Use TornadoVM in Your Project (Maven)

<dependencies>
  <dependency>
    <groupId>io.github.beehive-lab</groupId>
    <artifactId>tornado-api</artifactId>
    <version>2.2.0</version>
  </dependency>
  <dependency>
    <groupId>io.github.beehive-lab</groupId>
    <artifactId>tornado-runtime</artifactId>
    <version>2.2.0</version>
  </dependency>
</dependencies>

4. Programming Model

TornadoVM offers two complementary ways to express parallelism:

Loop Parallel API

Use Java annotations such as @Parallel and @Reduce to parallelize loops.

Kernel API

Use KernelContext for explicit GPU-style programming (thread IDs, local memory, barriers), similar to CUDA/OpenCL/SYCL.

Both models can be combined inside a TaskGraph.

Read more in our documentation.

5. Contributing to TornadoVM

We welcome contributions from the community — bug reports, documentation improvements, new features, and backends.

Building From Source

For contributors and developers, full build instructions are in:

👉 INSTALL_FROM_SOURCE.md

How to Contribute

Collaborations:

For Academic & Industrial collaborations, please contact here.

6. Additional Resources

Here you can find videos, presentations, tech-articles and artefacts describing TornadoVM, and how to use it.

7. 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:

@inproceedings{Fumero:DARHH:VEE:2019,
 author = {Fumero, Juan and Papadimitriou, Michail and Zakkak, Foivos S. and Xekalaki, Maria and Clarkson, James and Kotselidis, Christos},
 title = {{Dynamic Application Reconfiguration on Heterogeneous Hardware.}},
 booktitle = {Proceedings of the 15th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments},
 series = {VEE '19},
 year = {2019},
 doi = {10.1145/3313808.3313819},
 publisher = {Association for Computing Machinery}
}

If you are using Tornado 0.1 (Initial release), please use the following citation in your work.

@inproceedings{Clarkson:2018:EHH:3237009.3237016,
 author = {Clarkson, James and Fumero, Juan and Papadimitriou, Michail and Zakkak, Foivos S. and Xekalaki, Maria and Kotselidis, Christos and Luj\'{a}n, Mikel},
 title = {{Exploiting High-performance Heterogeneous Hardware for Java Programs Using Graal}},
 booktitle = {Proceedings of the 15th International Conference on Managed Languages \& Runtimes},
 series = {ManLang '18},
 year = {2018},
 isbn = {978-1-4503-6424-9},
 location = {Linz, Austria},
 pages = {4:1--4:13},
 articleno = {4},
 numpages = {13},
 url = {http://doi.acm.org/10.1145/3237009.3237016},
 doi = {10.1145/3237009.3237016},
 acmid = {3237016},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {Java, graal, heterogeneous hardware, openCL, virtual machine},
}

Selected publications can be found here.

8. Acknowledgments

This work is partially funded by Intel corporation. In addition, it has been supported by the following EU & UKRI grants (most recent first):

Furthermore, TornadoVM has been supported by the following EPSRC grants:

9. TornadoVM Team

Visit our website to meet the team.

10. 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:

Modules License
Tornado-API, Tornado-Assembly, Tornado-scripts,
Tornado-Annotation, Tornado-Unittests, Tornado-Benchmarks,
Tornado-Examples, Tornado-Matrices, Tornado-Drivers-OpenCL-Headers
License: Apache 2
Tornado-Runtime, Tornado-Drivers License: GPL v2
Morty Proxy This is a proxified and sanitized view of the page, visit original site.