Invited talk at ARM - Exploiting Heterogeneous Hardware from Managed Runtime Languages


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.

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