TornadoVM: Java for GPUs and FPGAs

There is no single computer architecture that is best for executing all types of workloads efficiently. Therefore, the proliferation of heterogeneous hardware in recent years means that every system we program is likely to include a mix of computing elements; each of these with different hardware characteristics that enable programmers to improve performance while decreasing energy consumption. These new heterogeneous devices include multi-core CPUs, Graphics Processing Units (GPUs), and Field Programmable Gate Arrays (FPGAs). This trend has been followed by changes in software development norms that do not necessarily favor programmers.

A prime example is the two most popular heterogeneous programming languages, CUDA and OpenCL, which expose several low-level features to the API, making them difficult to use by non-expert users. Instead of using low-level programming languages, developers in industry and academia tend to use higher-level, object-oriented programming languages, typically executed on managed runtime environments, such as Java, R, Python, and JavaScript. Although many programmers might expect that such programming languages would have already been adapted for transparent execution on heterogeneous hardware, the reality is that their support is either very limited or absent.

In this talk, we present TornadoVM, a plugin for OpenJDK that allows Java programmers to automatically run on Heterogeneous Hardware such as multi-core CPUs, GPUs, and FPGAs. Furthermore, TornadoVM can perform live task-migration from one device to another entirely transparent for the user. To do so, TornadoVM consists of three software components: 1) A simple API for composing pipelines of existing Java methods. 2) An optimizing JIT compiler that extends the Graal compiler with hardware-aware optimizations that generate OpenCL C code. 3) A runtime system that executes TornadoVM specific bytecodes, it performs memory management. It also schedules the code for execution on GPUs, multi-core CPUs, and FPGAs, and it performs live task-migration between devices.

What is the work you're doing today?

I'm currently a research associate at the University of Manchester, UK,  working at the Advanced Processor Technology Group (APT). What we do is research on new language virtual machines to take advantage of new hardware accelerators as transparent as possible with the aim to increase performance and decrease energy consumption. The use-case we have is TornadoVM, a plugin to OpenJDK that automatically runs Java programs and on GPUs and FPGAs. That's one direction. Another direction we are investigating is how to integrate this into distributed programming frameworks such as Flink and Spark.

What are your goals for your QCon talk?

I would say the main goals are to get the audience to know that current computer systems are heterogeneous. Mobile devices have multicore CPUs and GPUs, as well as laptops and even data centers, that are including reconfigurable hardware (FPGAs) as well. So heterogeneous computing is here to stay. That's great, but we need to program them somehow. We need to use them. And thus the goal of my talk, how to use them efficiently from managed programming languages like Java.

What are some of the key takeaways from your talk?

Getting people to know TornadoVM and the reasons to use it. There are many alternatives. TornadoVM is just one proposal but we offer more features and code coverage than others. Additionally, although TornadoVM is developed inside academia, we are starting to get the attention from the industry. So it can be used outside of academia. We have cases for deep learning, computer vision, machine learning, fintech, etc..


Juan Jose Fumero Alfonso

Research Associate @OfficialUoM (The University of Manchester)

Juan Fumero is a postdoc at the University of Manchester. His research topics are Heterogeneous High-Level Languages Virtual Machines, GPGPUs, and distributed computing. Currently, he is working as part of the TornadoVM and E2Data European projects for bringing automatic GPU and FPGA JIT...

Read more
Find Juan Jose Fumero Alfonso at:


Windsor, 5th flr.


Modern Compilation Targets


Interview AvailableJVMCompilersHardwarePerformanceOptimization


From the same track

SESSION + Live Q&A Compilers

The Modern Platform in 2020

We are reshaping the platforms we build around language technology. This talk introduces this new track on compilation targets with an overview of how we got to this point where programming language technology is finding its way into every technology stack. First we have performance and...

Justin Cormack

Developer @Docker

SESSION + Live Q&A WebAssembly

Build Your Own WebAssembly Compiler

For more than 20 years JavaScript has been the only 'native' language of the web. That's all changed with the release of WebAssembly. In the coming years, you'll see people writing web apps in Rust, C#, C++ and all manner of other languages. But just what is WebAssembly? And...

Colin Eberhardt

CTO @Scott_Logic

UNCONFERENCE + Live Q&A Compilers

Modern Compilation Targets Open Space

Details to follow.


Tiny Go: Small Is Going Big

The Go programming language has already won the war for cloud computing and containerization. But what about the small places, like embedded systems and WebAssembly?TinyGo is a compiler for Go, written in Go itself, that uses LLVM to achieve very small, fast, and concurrent binaries that can...

Ron Evans

Technologist For Hire @hybrid_group

SESSION + Live Q&A Compilers

Pony, Actors, Causality, Types, and Garbage Collection

I will give an overview of Pony’s programming model, actors, and causality. I will introduce the type system, how it is used to allow actors to send mutable state while also avoiding data races, and how the type system is used so as to allow the actors to perform garbage collection fully...

Sophia Drossopoulou

Professor at Imperial College

View full Schedule