In the recent years, the graphics processing unit (GPU) has emerged as a popular platform for performing general purpose calculations. The high computational power of the GPU has made it an attractive accelerator for achieving increased performance of computer programs. Although GPU programming has become more tangible over theyears, it is still challenging to program GPUs efficiently to achieve good performance.
The FEniCS Project is a collection of software components for the automated solution of partial differential equations. It allows users to specify input problems in a high-level, domain specific language. Novel techniques such as code generation and just-in-time compilation is used to automate the implementation of complicated code. This ensures computational efficiency of the software while retaining a high-level user interface that accepts a wide range of problems as input. To further increase the performance of the software, it is of interest to accelerate certain parts of it via GPUs.
This thesis presents a GPU-accelerated implementation of the FEniCS Project. By integrating GPU-accelerated libraries for linear algebra, the solution of linear systems of equations is accelerated. With this implementation, the rate of floating point operations performed on the GPU is up to six times higher than that of the CPU. This leadsto significant decreases in the time required to solve the linear systems. Throughout, emphasis was placed on keeping the resulting implementation clean and easy to maintain for the software developers. In the spirit of the FEniCS Project, the user interface remains easy to use, with simple parameters for activating GPU acceleration. Thedistribution and compilation of the software is kept simple by extending the FEniCS build system.
Through this implementation, it is shown that integrating GPU-accelerated libraries in an existing software system is a viable approach to increase the system’s performance. It makes it possible to keep the overall structure and layout of the system intact while still utilizing the computational power of the GPU.