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.
Finally, we present a technique that extends the current TornadoVM to execute untyped and dynamic languages, such as R and Ruby, on GPUs, without any changes in the source code. Our preliminary results show we achieve speedups of up to 150x when using the GPU OpenCL JIT Compilation for Dynamic Programming Languages.