GPU System Call
Rutgers University
arXiv:1705.06965 [cs.OS], (19 May 2017)
@article{vesely2017system,
title={GPU System Call},
author={Vesely, Jan and Basu, Arkaprava and Bhattacharjee, Abhishek and Loh, Gabriel and Oskin, Mark and Reinhardt, Steven K.},
year={2017},
month={may},
archivePrefix={"arXiv"},
primaryClass={cs.OS}
}
GPUs are becoming first-class compute citizens and are being tasked to perform increasingly complex work. Modern GPUs increasingly support programmability-enhancing features such as shared virtual memory and hardware cache coherence, enabling them to run a wider variety of programs. But a key aspect of general-purpose programming where GPUs are still found lacking is the ability to invoke system calls. We explore how to directly invoke generic system calls in GPU programs. We examine how system calls should be meshed with prevailing GPGPU programming models where thousands of threads are organized in a hierarchy of execution groups: Should a system call be invoked at the individual GPU task, or at different execution group levels? What are reasonable ordering semantics for GPU system calls across these hierarchy of execution groups? To study these questions, we implemented GENESYS — a mechanism to allow GPU programs to invoke system calls in the Linux operating system. Numerous subtle changes to Linux were necessary, as the existing kernel assumes that only CPUs invoke system calls. We analyze the performance of GENESYS using micro-benchmarks and three applications that exercise the filesystem, networking, and memory allocation subsystems of the kernel. We conclude by analyzing the suitability of all of Linux’s system calls for the GPU.
May 22, 2017 by hgpu