Code Monkey home page Code Monkey logo

tornadovm's Introduction

TornadoVM

🌪️ 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.

Releases

How to start?

A) From scratch:

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.

B) Using Docker

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
TornadoVM Docker for NVIDIA GPUs:

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 
TornadoVM Docker for Intel Integrated GPUs:

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.

What can I do with TornadoVM?

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.

Selected Publications

  • 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

Citation

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

Acknowledgments

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.

Collaborations

We welcome collaborations! Please see how to contribute in the CONTRIBUTIONS.

For academic collaborations please contact Christos Kotselidis.

Users Mailing list

A mailing list is also available to discuss Tornado related issues:

[email protected]

Contributors

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:

License

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:

Module License
Tornado-Runtime License: GPL v2 + CLASSPATH Exception
Tornado-Assembly License: GPL v2 + CLASSPATH Exception
Tornado-Drivers License: GPL v2 + CLASSPATH Exception
Tornado-API License: GPL v2 + CLASSPATH Exception
Tornado-Drivers-OpenCL-Headers License: MIT
Tornado-scripts License: GPL v2
Tornado-Annotation License
Tornado-Unittests License
Tornado-Benchmarks License
Tornado-Examples License
Tornado-Matrices License

tornadovm's People

Contributors

jjfumero avatar mikepapadim avatar stratika avatar gigiblender avatar kotselidis avatar zakkak avatar jclarkson avatar gaur4vgaur avatar mairooni avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.