Tornado, a practical heterogeneous programming framework for Java, has been released as an open-source project in GitHub. Tornado enables automatic just-in-time (JIT) compilation and acceleration of Java programs on any OpenCL compatible device, such as multicore central processing units (CPUs), graphics processing units (GPUs) and field-programmable gate arrays (FPGAs).
Tornado provides a minimal parallel task-based application programming interface that programmers can use to express computation to be offloaded and accelerated on GPUs and FPGAs. In addition, Tornado includes a runtime that automatically manages and optimizes memory transfers between heterogeneous devices and the main CPU. The Tornado JIT compiler extends the new Oracle Graal JIT compiler with new information that guides the compilation and optimization process for heterogeneous architectures, allowing to reuse and easily extend typical Java virtual machine optimizations for new devices.
Currently, Tornado is included as a component in a European H2020 project called E2Data. This project aims to provide end-to-end solutions for accelerating big-data workloads that fully exploits distributed memory systems and heterogeneous hardware. Tornado supports the E2Data project by providing a compiler framework and a runtime system in which compile and execute, big data programs implemented in Java on heterogeneous hardware.