Quasar tutorial: High-level programming of Heterogeneous Hardware


The use of graphical processing units (GPUs) for general purpose calculations has gained a lot of attention, since speed-up factors of 10x-50x compared to single-threaded CPU execution are not uncommon. This makes the use of GPUs for scientific number crunching applications very appealing. However, GPU programming is challenging, requiring a significant programming expertise in order to get these significant accelerations. The low-level programming required to harvest the GPU parallel power is a major drawback for research both in industry and in academics. In a research environment algorithms typically have to be rapidly tested and adjusted as a proof of concept and little time can be spend on implementation optimization.In this tutorial we present Quasar, a new programming framework that takes care of many common challenges for GPU programming, e.g. memory management, load balancing, scheduling. Quasar consist of a high level programming language with a similar abstraction level as Python or Matlab, making it well suited for rapid prototyping. We demonstrate the use of this programming language for a number of examples. We show how we can start from a straight forward parallelization and further improve it based on the feedback from the profiler and automated profiling analysis. Finally attendees will be able to exercise with Quasar and the IDE tools in a hands-on part of the tutorial.Tutorial goalsThe goal of the proposed tutorial is to introduce high level programming of heterogeneous hardware to the participants. A second goal is to get attendees acquainted with relevant development tools and how, based on the feedback from these tools, they can easily improve their developed algorithms without the need of low-level optimizations. You will benefit from the tutorial by1) having a low barrier of entry for GPU programming2) having shorter development cycles compared to classical low-level languages for heterogeneous hardware, due to the use of a high-level programming language