SafeGPU: Contract- and library-based GPGPU for object-oriented languages
Using GPUs as general-purpose processors has revolutionized parallel computing by providing, for a large and growing set of algorithms, massive data-parallelization on desktop machines. An obstacle to their widespread adoption, however, is the difficulty of programming them and the low-level control...
Gespeichert in:
Veröffentlicht in: | Computer languages, systems & structures systems & structures, 2017-06, Vol.48, p.68-88 |
---|---|
Hauptverfasser: | , , |
Format: | Artikel |
Sprache: | eng |
Schlagworte: | |
Online-Zugang: | Volltext |
Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
Zusammenfassung: | Using GPUs as general-purpose processors has revolutionized parallel computing by providing, for a large and growing set of algorithms, massive data-parallelization on desktop machines. An obstacle to their widespread adoption, however, is the difficulty of programming them and the low-level control of the hardware required to achieve good performance. This paper proposes a programming approach, SafeGPU, that aims to make GPU data-parallel operations accessible through high-level libraries for object-oriented languages, while maintaining the performance benefits of lower-level code. The approach provides data-parallel operations for collections that can be chained and combined to express compound computations, with data synchronization and device management all handled automatically. It also integrates the design-by-contract methodology, which increases confidence in functional program correctness by embedding executable specifications into the program text. We present a prototype of SafeGPU for Eiffel, and show that it leads to modular and concise code that is accessible for GPGPU non-experts, while still providing performance comparable with that of hand-written CUDA code. We also describe our first steps towards porting it to C#, highlighting some challenges, solutions, and insights for implementing the approach in different managed languages. Finally, we show that runtime contract-checking becomes feasible in SafeGPU, as the contracts can be executed on the GPU.
•A library-based GPU programming approach for object-oriented languages; implemented for Eiffel, and partially ported to C#.•Supports modular, efficient, and customizable GPU programming.•Automatically generates and optimizes CUDA kernels from high-level code.•Handles the transfer of primitives, simple classes, and function abstractions to C++ and CUDA.•Supports contracts and efficient runtime assertion checking on the GPU. |
---|---|
ISSN: | 1477-8424 1873-6866 |
DOI: | 10.1016/j.cl.2016.08.002 |