🌪️ TornadoVM is a plug-in to OpenJDK and GraalVM that allows programmers to automatically run Java programs on heterogeneous hardware. TornadoVM currently targets OpenCL-compatible devices and it runs on multi-core CPUs, GPUs (NVIDIA and AMD), Intel integrated GPUs, and Intel FPGAs.
- TornadoVM 0.6 - 21/02/2020 : See CHANGELOG
- TornadoVM 0.5 - 16/12/2019 : See CHANGELOG
- TornadoVM 0.4 - 14/10/2019 : See CHANGELOG
- TornadoVM 0.3 - 22/07/2019 : See CHANGELOG
- TornadoVM 0.2 - 25/02/2019 : See CHANGELOG
- Tornado 0.1.0 - 07/09/2018 : See CHANGELOG
The INSTALL page contains instructions on how to install TornadoVM while the EXAMPLES page includes examples regarding running Java programs on GPUs.
We also maintain a live TornadoVM whitepaper document which you can download here.
We have tested our docker images for CentOS >= 7.4 and Ubuntu >= 16.04. We currently have docker images for NVIDIA and Intel Integrated GPUs using OpenJDK 8 and GraalVM for JDK 8 and 11:
- TornadoVM docker images for NVIDIA GPUs
- TornadoVM docker images for Intel Integrated Graphics
Note that this requires the nvidia-docker runtime.
Using TornadoVM with OpenJDK 8 for NVIDIA GPUs:
## Docker image for TornadoVM and OpenJDK 8
$ docker pull beehivelab/tornado-gpu:latest
$ git clone https://github.com/beehive-lab/docker-tornado
$ cd docker-tornado
$ ./run_nvidia.sh javac.py example/MatrixMultiplication.java
$ ./run_nvidia.sh tornado example/MatrixMultiplication
Using TornadoVM with GraalVM for NVIDIA GPUs:
## GraalVM with JDK 8
$ docker pull beehivelab/tornado-gpu-graalvm-jdk8:latest
## GraalVM with JDK 11
$ docker pull beehivelab/tornado-gpu-graalvm-jdk11:latest
In our docker-tornado repository we have all runner scripts for each configuration.
# example of running graal images
./run_nvidia_graalvm-jdk8.sh tornado ...
./run_nvidia_graalvm-jdk11.sh tornado ...
Example for running the TornadoVM with OpenJDK 8:
## Run with TornadoVM on an NVIDIA GPU using OpenJDK 8
$ ./run_nvidia.sh tornado example/MatrixMultiplication 2048 ## Running on NVIDIA GP100
Computing MxM of 2048x2048
CPU Execution: 0.36 GFlops, Total time = 48254 ms
GPU Execution: 277.09 GFlops, Total Time = 62 ms
Speedup: 778x
Using TornadoVM with OpenJDK 8 for Intel Integrated Graphics:
# TornadoVM image with OpenJDK 8
$ docker pull beehivelab/tornado-intel-gpu:latest
$ git clone https://github.com/beehive-lab/docker-tornado
$ cd docker-tornado
$ ./run_intel.sh javac.py example/MatrixMultiplication.java
$ ./run_intel.sh tornado example/MatrixMultiplication
Using TornadoVM with GraalVM for Intel Integrated Graphics:
## GraalVM with JDK 8
$ docker pull beehivelab/tornado-intel-igpu-graalvm-jdk8:latest
$ run_intel_graalvm_jdk8.sh tornado ...
## GraalVM with JDK 11
$ docker pull beehivelab/tornado-intel-igpu-graalvm-jdk11:latest
$ run_intel_graalvm_jdk11.sh tornado ...
See our docker-tornado repository for more details.
We have a use-case, kfusion-tornadovm, for accelerating a computer-vision application implemented in Java using the Tornado-API to run on GPUs.
We also have a set of examples that includes NBody, DFT, KMeans computation and matrix computations.
-
Juan Fumero, Michail Papadimitriou, Foivos Zakkak, Maria Xekalaki, James Clarkson, Christos Kotselidis. Dynamic Application Reconfiguration on Heterogeneous Hardware. In Proceedings of the 15th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments.
-
Juan Fumero, Christos Kotselidis. Using Compiler Snippets to Exploit Parallelism on Heterogeneous Hardware: A Java Reduction Case Study In Proceedings of the 10th ACM SIGPLAN International Workshop on Virtual Machines and Intermediate Languages (VMIL'18)
-
James Clarkson, Juan Fumero, Michalis Papadimitriou, Foivos S. Zakkak, Maria Xekalaki, Christos Kotselidis, Mikel Luján (The University of Manchester). Exploiting High-Performance Heterogeneous Hardware for Java Programs using Graal. Proceedings of the 15th International Conference on Managed Languages & Runtime. Preprint
-
Sajad Saeedi, Bruno Bodin, Harry Wagstaff, Andy Nisbet, Luigi Nardi, John Mawer, Nicolas Melot, Oscar Palomar, Emanuele Vespa, Tom Spink, Cosmin Gorgovan, Andrew Webb, James Clarkson, Erik Tomusk, Thomas Debrunner, Kuba Kaszyk, Pablo Gonzalez-de-Aledo, Andrey Rodchenko, Graham Riley, Christos Kotselidis, Björn Franke, Michael FP O'Boyle, Andrew J Davison, Paul HJ Kelly, Mikel Luján, Steve Furber. Navigating the Landscape for Real-Time Localization and Mapping for Robotics and Virtual and Augmented Reality. In Proceedings of the IEEE, 2018.
-
C. Kotselidis, J. Clarkson, A. Rodchenko, A. Nisbet, J. Mawer, and M. Luján. Heterogeneous Managed Runtime Systems: A Computer Vision Case Study. In Proceedings of the 13th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments, VEE ’17, link
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 = {Juan Fumero, Michail Papadimitriou, Foivos Zakkak, Maria Xekalaki, James Clarkson, Christos Kotselidis},
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},
publisher = {ACM},
}
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},
}
This work was initially supported by the EPSRC grants PAMELA EP/K008730/1 and AnyScale Apps EP/L000725/1, and now it is funded by the EU Horizon 2020 E2Data 780245 and the EU Horizon 2020 ACTiCLOUD 732366 grants.
We welcome collaborations! Please see how to contribute in the CONTRIBUTIONS.
For academic collaborations please contact Christos Kotselidis.
A mailing list is also available to discuss Tornado related issues:
This work was originated by James Clarkson under the joint supervision of Mikel Luján and Christos Kotselidis. Currently, this project is maintained and updated by the following contributors:
- Juan Fumero
- Michail Papadimitriou
- Maria Xekalaki
- Athanasios Stratikopoulos
- Florin Blanaru
- Christos Kotselidis
To use TornadoVM, you can link the Tornado API to your application which is under the CLASSPATH Exception of GPLv2.0.
Each TornadoVM module is licensed as follows: