Tornado is a practical heterogeneous programming framework for Java, Tornado enables automatic Just-In-Time (JIT) compilation and acceleration of Java programs on any OpenCL compatible device, such as multi-core CPUs, GPUs and FPGAs.

Tornado provides a minimal parallel task-based API (Application Programming Interface) that programmers can use to express computation to be offloaded and accelerated on GPUs and FPGAs and multi-core CPUs.
Furthermore, Tornado includes a runtime that automatically manages and optimises 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 optimisation process for heterogeneous architectures, allowing to reuse and easily extend typical JVM optimisations for new heterogeneous devices.

Reference Architecture: 
GPLV2 with CLASSPATH Exception, Apache 2, MIT