Performance-aware component composition for GPU-based systems
Usman Dastgeer · Linköping University Electronic Press eBooks · 2014
This thesis adresses issues associated with efficiently programming modern heterogeneous GPU-based systems, containing multicore CPUs and one or more programmable Graphics Processing Units (GPUs).We use ideas from component-based programming to address programming, performance and portability issues of these heterogeneous systems.Specifically, we present three approaches that all use the idea of having multiple implementations for each computation; performance is achieved/retained either a) by selecting a suitable implementation for each computation on a given platform or b) by dividing the computation work across different implementations running on CPU and GPU devices in parallel.In the first approach, we work on a skeleton programming library (SkePU) that provides high-level abstraction while making intelligent implementation selection decisions underneath either before or during the actual program execution.In the second approach, we develop a composition tool that parses extra information (metadata) from XML files, makes certain decisions offline, and, in the end, generates code for making the final decisions at runtime.The third approach is a framework that uses source-code annotations and program analysis to generate code for the runtime library to make the selection decision at runtime.With a generic performance modeling API alongside program analysis capabilities, it supports online tuning as well as complex program transformations.These approaches differ in terms of genericity, intrusiveness, capabilities and knowledge about the program source-code; however, they all demonstrate usefulness of component programming techniques for programming GPU-based systems.With experimental evaluation, we demonstrate how all three approaches, although different in their own way, provide good performance on different GPU-based systems for a variety of applications.This work has been supported by two EU FP7 projects (PEP-PHER, EXCESS) and by SeRC.Finally, the moment to write this final part of my PhD thesis has come.It took me more than four years and I have many people to acknowledge for both academic and personal support.First and foremost, I would like to thank my main supervisor Christoph Kessler for his support and guidance througout this thesis work.He was a perfect advisor to me; accessible, open to new ideas and always available for discussions and advices.I learned a lot during this time with our interactions, and the freedom he gave me as my supervisor groomed my independent thinking.After that, I thank my co-supervisor Kristian Sandahl for his help and guidance in all matters.I learned many things about software engineering from him which helped me evaluate techniques that I devised during this thesis work