KAUST-IAMCS Workshop on Modeling and Simulation of Wave Propagation and Applications
- King Abdullah University of Science and Technology (KAUST)
- Thuwal, Saudi Arabia
- Conference Center (Building 19), Conference Halls 1 & 2
- George Turkiyyah, American University of Beirut (Lebanon)
- GPU Implementations of Hyperbolic PDE Solvers
We describe CUDACLAW, a GPU implementation of the Clawpack framework for the solution of hyperbolic PDEs in conservation form. The framework uses wave propagation algorithms based on the solution of one dimensional Riemann problems at cell interfaces and the application of flux limiters to suppress oscillations. The data parallelism of the algorithms and the high arithmetic intensity of the Riemann solvers at cell interfaces make these methods ideally suited, in principle, for acceleration on GPUs. However, there are significant challenges to achieving close-to-peak performance, largely related to the effective use of the GPU memory hierarchy. We describe how rearranging the computations, interleaving Riemann solutions and flux limiting, can achieve temporal locality and significantly speed up the computations. We also describe how automatic tuning and code generation allows the determination and use of block-sizes for optimal memory access patterns in different coordinate directions, as overall performance is highly sensitive to these parameters. The resulting system allows high-resolution end-to-end wave propagation simulations to be performed and visualized completely on the GPU with substantial performance. One advantage of the framework implemented is that new Riemann solvers and new limiters can be simply plugged in as pointwise functions into the framework. The details of CUDA are abstracted away allowing domain scientists to use the framework for solving new equations without having to worry about the details of block and thread indexing, granularity of local to global memory transactions, and other low level concerns. Finally, the framework is accessible through an expressive language front-end that we will briefly describe.