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 characteristics. This trend has been accompanied 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.
In this talk, we present TornadoVM, a new Virtual Machine (VM), based on the new Oracle Graal VM, that allows developers to automatically and transparently execute Java programs on multi-core CPUs, GPUs, and FPGAs. TornadoVM dynamically generates new bytecodes that work in combination with the Java bytecodes to enrich device-compilation and orchestrate the execution on heterogeneous devices. Furthermore, TornadoVM includes the ability to migrate parallel execution from one device to another at runtime.