TornadoVM

TornadoVM is a plug-in to OpenJDK and other JDK distributions (e.g., GraalVM, Red Hat Mandrel, Amazon Corretto, Microsoft OpenJDK, SAP, Azul Zulu) that allows developers to automatically run Java programs on heterogeneous hardware. TornadoVM targets devices compatible with OpenCL, NVIDIA PTX and Level-Zero, which include multi-core CPUs, dedicated GPUs (Intel, NVIDIA, AMD), integrated GPUs (Intel HD Graphics, Apple M1/M2/M3, and ARM Mali), and FPGAs (Intel and Xilinx).
- TornadoVM provides three backends:
OpenCL C: dispatched through an OpenCL runtime.
NVIDIA CUDA PTX: dispatched through the NVIDIA driver API.
SPIR-V: dispatched through the Level-Zero API.
Developers can choose which backend/s to install and run.
What is unique about TornadoVM?
TornadoVM does not only provide a set of JIT compilers to transpile Java bytecode to the target backend-code. It also provides a set of runtime features that make it unique in the Java scope:
Dynamic reconfiguration and live-task migration across devices at runtime.
Live profiling: TornadoVM provides utilities to profile and debug code on multiple platforms, including FPGAs.
Batch processing: TornadoVM provides utilities to perform automatic split and batch processing for acceleration of big-data applications.
Multi-device & Multi-backend support: TornadoVM can offload and run multiple kernels concurrently using different hardware accelerators using different backends.
TornadoVM is multi-vendor, running applications on NVIDIA, Intel, AMD, ARM and even RISC-V hardware accelerators.
Important: TornadoVM does not replace existing VMs, but it rather complements them with the capability of offloading Java code to OpenCL, PTX and SPIR-V, handling memory management between Java and hardware accelerators, and running/coordinating the compute-kernels.
Content:
- Introduction to TornadoVM
- Installation & Configuration
- Pre-requisites
- Supported Platforms
- Installation
- Installation Script
- Installation for Linux
- Installation for MacOS M1/M2/M3
- Installation for Windows 10/11
- Installation for Windows Subsystem for Linux (WSL)
- Installation for ARM Mali GPUs
- Running Examples
- Installation for RISC-V RVV 1.0 on Linux
- Known issues on Linux
- IDE Code Formatter
- TornadoVM Maven Projects
- Versions available
- Running Examples and Benchmarks
- Core Programming
- Migrating from v0.15.2 to v1.0
- Polyglot Programming
- TornadoVM Profiler
- Benchmarking TornadoVM
- FPGA Programming in TornadoVM
- Pre-requisites
- Step 1: Update/Create the FPGA’s configuration file
- Example of a configuration file for Intel FPGAs (Emulation mode) with the Intel oneAPI Base Tool Kit:
- Example of a configuration file for an Intel Nallatech-A385 FPGA (Intel Arria 10 GT1150):
- Example of a configuration file for a Xilinx KCU1500 FPGA:
- Example of a configuration file for a Xilinx Alveo U50 FPGA:
- Example of a configuration file for an AWS xilinx_aws-vu9p-f1-04261818_dynamic_5_0 FPGA:
- Step 2: Select one of the three FPGA Execution Modes
- Docker Containers
- Cloud Deployments
- 1. Running on AWS for CPUs and GPUs
- 2. Running on AWS EC2 F1 Xilinx FPGAs
- Pre-requisites:
- 1. Install TornadoVM as a CentOS user. The Xilinx FPGA is not exposed to simple users.
- 2. Follow these steps to get access to the Xilinx FPGA.
- 3. Update the the FPGA Conguration file
- 4. Run a program that offloads a task on the FPGA.
- 5. You can monitor the status of your Amazon FPGA Image.
- 6. Now that the AFI is available, you can execute the program and run the OpenCL kernel on the AWS FPGA.
- SPIR-V Devices
- CUDA Devices
- Multi-Device Execution
- TornadoVM Flags
- Build and Run with IDE
- Developer Guidelines
- Build the Documentation
- Frequently Asked Questions
- 1. What can TornadoVM do?
- 2. Can I use TornadoVM in a commercial application?
- 3. How can I use it?
- 4. Which programming languages does TornadoVM support?
- 5. Is TornadoVM a Domain Specific Language (DSL)?
- 6. Does it support the whole Java Language?
- 7. Can TornadoVM degrade the performance of my application?
- 8. Dynamic Reconfiguration? What is this?
- 9. Does TornadoVM support only OpenCL devices?
- 10. Why is it called a VM?
- 11. How does it interact with OpenJDK?
- 12. How do I know which parts of my application are suitable for acceleration?
- 13. How can I contribute to TornadoVM?
- 14. Does TornadoVM support calls to standard Java libraries?
- 15. Do I need a GPU to run TornadoVM?
- Unsupported Java features
- Resources
- Publications
- TornadoVM Changelog
- TornadoVM 1.1.0
- TornadoVM 1.0.10
- TornadoVM 1.0.9
- TornadoVM 1.0.8
- TornadoVM 1.0.7
- TornadoVM 1.0.6
- TornadoVM 1.0.5
- TornadoVM 1.0.4
- TornadoVM 1.0.3
- TornadoVM 1.0.2
- TornadoVM 1.0.1
- TornadoVM 1.0
- TornadoVM 0.15.2
- TornadoVM 0.15.1
- TornadoVM 0.15
- TornadoVM 0.14.1
- TornadoVM 0.14
- TornadoVM 0.13
- TornadoVM 0.12
- TornadoVM 0.11
- TornadoVM 0.10
- TornadoVM 0.9
- TornadoVM 0.8
- TornadoVM 0.7
- TornadoVM 0.6
- TornadoVM 0.5
- TornadoVM 0.4
- TornadoVM 0.3
- TornadoVM 0.2
- Tornado 0.1.0