In modern computing, the Graphical Processing Unit (GPU) has proven its worth beyond that of graphics rendering. Its usage is extended into the field of general purpose computing, where applications exploit the GPU's massive parallelism to accelerate their tasks. Meanwhile, Virtual Machines (VM) continue to provide utility and security by emulating entire computer hardware platforms in software. In the context of VMs, however, there is the problem that their emulated hardware arsenal do not provide any modern, high end GPU. Thus any application running in a VM will not have access to this computing resource, even if it can be backed by physically available resources.
In this thesis we address this problem. We discuss different approaches to provide VMs with GPU acceleration, and use this to design and implement Vocale (pronounced "Vocal"). Vocale is an extension to VM technology that enables applications in a VM to accelerate their operation using a virtual GPU.
A critical look at our implementation is made to find out what makes this task difficult, and what kind of demands such systems place on the supporting software architecture. To do this we evaluate the efficiency of our virtual GPU contra a GPU running directly on physical hardware.
This thesis holds value for readers who are interested in virtualization and GPU technology. Vocale, however, also features a broad range of technologies. Anyone with interest in programming in C / C++, software libraries, kernel modules, Python scripting and automatic code generation will have a chance of finding something interesting here.