This book provides an introduction to both heterogeneous execution and managed runtime environments (MREs) by discussing the current trends in computing and the evolution of both hardware and software. To this end, it first details how heterogeneous hardware differs from traditional CPUs, what their key components are and what challenges they pose to heterogenous execution. The most ubiquitous ones are General Purpose Graphics Processing Units (GPGPUs) which are pervasive across a plethora of application domains ranging from graphics processing to training of AI and Machine Learning models. Subsequently, current solutions on programming heterogeneous MREs are described, highlighting for each current existing solution the associated advantages and disadvantages.
This book is written for scientists and advanced developers who want to understand how choices at the programming API level can affect performance and/or programmability of heterogeneous hardware accelerators, how toimprove the underlying runtime systems in order to seamlessly integrate diverse hardware resources, or how to exploit acceleration techniques from their preferred programming languages.