Affiliation:
1. University of Münster, Münster, Germany
2. Technische Universität Berlin, Berlin, Germany
Abstract
Graphics Processing Units (GPU) offer tremendous computational power by following a throughput oriented paradigm where many thousand computational units operate in parallel. Programming such massively parallel hardware is challenging. Programmers must correctly and efficiently coordinate thousands of threads and their accesses to various shared memory spaces. Existing mainstream GPU programming languages, such as CUDA and OpenCL, are based on C/C++ inheriting their fundamentally unsafe ways to access memory via raw pointers. This facilitates easy to make, but hard to detect bugs, such as
data races
and
deadlocks
.
In this paper, we present
Descend
: a safe GPU programming language. In contrast to prior safe high-level GPU programming approaches,
Descend
is an imperative GPU
systems programming language
in the spirit of Rust, enforcing safe CPU and GPU memory management in the type system by tracking
Ownership
and
Lifetimes
.
Descend
introduces a new
holistic GPU programming
model where computations are hierarchically scheduled over the GPU’s
execution resources
: grid, blocks, warps, and threads.
Descend
’s extended
Borrow
checking ensures that execution resources safely access memory regions without data races. For this, we introduced
views
describing safe parallel access patterns of memory regions, as well as
atomic
variables. For memory accesses that can’t be checked by our type system, users can annotate limited code sections as
unsafe
.
We discuss the memory safety guarantees offered by
Descend
and evaluate our implementation using multiple benchmarks, demonstrating that
Descend
is capable of expressing real-world GPU programs showing competitive performance compared to manually written CUDA programs lacking
Descend
’s safety guarantees.
Publisher
Association for Computing Machinery (ACM)
Reference33 articles.
1. Robert Atkey, Michel Steuwer, Sam Lindley, and Christophe Dubach. 2017. Strategy Preserving Compilation for Parallel Functional Code. CoRR, abs/1710.08332 (2017), arXiv:1710.08332. arxiv:1710.08332
2. Michael Bauer John Clark Eric Schkufza and Alex Aiken. 2010. Sequoia++ User Manual.
3. Singe
4. GPUVerify
5. Checking Data-Race Freedom of GPU Kernels, Compositionally