Computing systems have become increasingly complex and difficult to program, in particular with the emergence of heterogeneous hardware. For instance it is now common to see GPUs (Graphic Processing Units) used for general purpose computation in data centres or supercomputers. As a result, achieving high performance for such complex systems is an extremely challenging task. This problem is further exacerbated with each new generation of hardware, which means that software written and tuned for today’s systems needs to be adapted frequently to keep pace with ever changing hardware.
In this talk I will go through examples of my prior work that attempt to address some of these issues. First I will be discussing the use of machine-learning and automated techniques to build portable optimising compilers. Then I will talk about high-level code generation and optimisations for multicore CPUs and GPUs. Finally, I will describe some of the recent research directions I am exploring related to performance portability for heterogeneous systems.