General-purpose Graphics Processing Units (GPGPUs) potentially offer exceptionally high memory bandwidth and performance for a wide range of applications. The challenge in utilizing such accelerators has been the difficulty in programming them. Today, these devices can be programmed with various available extensions to C++ and Fortran programming languages, like CUDA, OpenACC or OpenMP. There is also a wide range of numerical libraries which can make use of GPU acceleration.