  We propose a server-based approach to manage a general-purpose graphics
processing unit (GPU) in a predictable and efficient manner. Our proposed
approach introduces a GPU server that is a dedicated task to handle GPU
requests from other tasks on their behalf. The GPU server ensures bounded time
to access the GPU, and allows other tasks to suspend during their GPU
computation to save CPU cycles. By doing so, we address the two major
limitations of the existing real-time synchronization-based GPU management
approach: busy waiting and long priority inversion. We have implemented a
prototype of the server-based approach on a real embedded platform. This case
study demonstrates the practicality and effectiveness of the server-based
approach. Experimental results indicate that the server-based approach yields
significant improvements in task schedulability over the existing
synchronization-based approach in most practical settings. Although we focus on
a GPU in this paper, the server-based approach can also be used for other types
of computational accelerators.
