Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

beehive-lab/TornadoVM

TornadoVM: A practical and efficient heterogeneous programming framework for managed languages

beehive-lab/TornadoVM.json
{
"createdAt": "2018-09-07T09:37:44Z",
"defaultBranch": "master",
"description": "TornadoVM: A practical and efficient heterogeneous programming framework for managed languages",
"fullName": "beehive-lab/TornadoVM",
"homepage": "https://www.tornadovm.org",
"language": "Java",
"name": "TornadoVM",
"pushedAt": "2026-01-05T10:57:57Z",
"stargazersCount": 1420,
"topics": [
"ai",
"cuda",
"gpu-acceleration",
"gpu-computing",
"gpus",
"graalvm",
"java",
"levelzero",
"multi-core",
"opencl",
"parallel-computing",
"parallel-programming",
"spirv"
],
"updatedAt": "2026-01-07T21:43:33Z",
"url": "https://github.com/beehive-lab/TornadoVM"
}

Build on [push]

API Version Runtime Version SDKMAN!

TornadoVM version [Contributor Covenant]!(CODE_OF_CONDUCT.md) 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

Section titled “1. Quick Start - Install & Use the TornadoVM SDK”
  • 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.

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:

BackendSDKMAN! Latest Version
OpenCL2.2.0-opencl (default)
PTX2.2.0-ptx
SPIR-V2.2.0-spirv
All Backends2.2.0-full

Install TornadoVM:

Terminal window
sdk install tornadovm <version>

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

Terminal window
tornado --devices

This command lists all supported devices available on your system.

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.

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.

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

Terminal window
java @$TORNADOVM_HOME/tornado-argfile -cp $TORNADOVM_HOME/share/java/tornado/tornado-examples-2.2.0.jar uk.ac.manchester.tornado.examples.compute.MatrixVectorRowMajor
Terminal window
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

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

TornadoVM offers two complementary ways to express parallelism:

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

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.

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

For contributors and developers, full build instructions are in:

👉 [INSTALL_FROM_SOURCE.md]!(INSTALL_FROM_SOURCE.md)

  • Read the [CONTRIBUTING]!(CONTRIBUTING.md) page.
  • Write your questions in GitHub discussions or in the TornadoVM Slack community.
  • Share your proposals with us in GitHub discussions or as a Google document.
  • Submit pull requests — all contributions are welcome.

For Academic & Industrial collaborations, please contact here.

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

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.

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:

Visit our website to meet the team.

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:

ModulesLicense
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-DriversLicense: GPL v2