warning icon QCon London 2021 has been canceled. See our current virtual and in-person events.
You are viewing content from a past/completed QCon

Presentation: TornadoVM: Java for GPUs and FPGAs

Track: Modern Compilation Targets

Location: Windsor, 5th flr.

Duration: 1:40pm - 2:30pm

Day of week: Tuesday

Slides: Download Slides

Share this on:

This presentation is now available to view on InfoQ.com

Watch video with transcript

What You’ll Learn

  1. Hear about Tornado VM, what it is and what it is good for.
  2. Find out what are the latest developments on heterogeneous hardware, and where TornadoVM fits.


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.

Another goal is to introduce people to the device selection problem. This is because now, we have the choice of where to execute code on the best possible hardware for each program (e.g, is it on a GPU? on an FPGA?) This is a hard problem because it depends on many factors that are only finally decided at runtime, such as input-sizes. This is an important problem that TornadoVM automatically tackles and I will show how.


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

Finally, I would like people to remember that TornadoVM is not a replacement for the Java Virtual Machine (JVM), but rather a complement to execute specialized workloads much faster by transparently using the right hardware. For example, I will show that TornadoVM can achieve up to 4500x speedup compared to Java OpenJDK when running on GPUs and FPGAs.

Speaker: 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 compilation and execution for Java programs. He received a Ph.D. degree from The University of Edinburgh on Accelerating Interpreted Programming Languages on GPUs for Java, R, and Ruby. Additionally, he has also worked as an intern at Oracle Labs and CERN, implementing compilers, and evaluating parallel techniques for multi-core systems.

Find Juan Jose Fumero Alfonso at

Last Year's Tracks