Towards a Performance-portable Description of Geometric Multigrid Algorithms using a Domain-specific Language

Membarth, Richard; Reiche, Oliver; Schmitt, Christian; Hannig, Frank; Teich, Jürgen; Stürmer, Markus; Köstler, Harald

High Performance Computing (HPC) systems are nowadays more and more heterogeneous. Different processor types can be found on a single node including accelerators such as Graphics Processing Units (GPUs). To cope with the challenge of programming such complex systems, this work presents a domain-specific approach to automatically generate code tailored to different processor types. Low-level CUDA and OpenCL code is generated from a high-level description of an algorithm specified in a Domain-Specific Language (DSL) instead of writing hand-tuned code for GPU accelerators. The DSL is part of the Heterogeneous Image Processing Acceleration (HIPAcc) framework and was extended in this work to handle grid hierarchies in order to model different cycle types. Language constructs are introduced to process and represent data at different resolutions. This allows to describe image processing algorithms that work on image pyramids as well as multigrid methods in the stencil domain. By decoupling the algorithm from its schedule, the proposed approach allows to generate efficient stencil code implementations. Our results show that similar performance compared to hand-tuned codes can be achieved.

In Journal of Parallel and Distributed Computing (JPDC), 24(12): 3191-3201, 2014

[pdf] [doi>10.1016/j.jpdc.2014.08.008]

@article{membarth2014towards,
  author    = {Membarth, Richard and Reiche, Oliver and Schmitt, Christian and Hannig, Frank and Teich, Jürgen and Stürmer, Markus and Köstler, Harald},
  title     = {{Towards a Performance-portable Description of Geometric Multigrid Algorithms using a Domain-specific Language}},
  journal   = {Journal of Parallel and Distributed Computing (JPDC)},
  pages     = {3191--3201},
  volume    = {74},
  number    = {12},
  year      = 2014,
  month     = dec,
  date      = {2014-12},
  doi       = {10.1016/j.jpdc.2014.08.008},
  publisher = {Elsevier}
}