Abstract: The development of a high performance PDE solver requires the combined expertise of interdisciplinary teams w.r.t. application domain, numerical scheme and low-level optimization. In this paper, we present how the ExaHyPE engine facilitates the collaboration of such teams by isolating three roles -- application, algorithms, and optimization expert -- thus allowing team members to focus on their own area of expertise, while integrating their contributions into an HPC production code.
To do so, ExaHyPE takes inspiration from web application development practices and relies on two custom code generation modules, the Toolkit and the Kernel Generator, that follow a Model-View-Controller architectural pattern on top of the Jinja2 template engine library. By using Jinja2's templates to abstract the critical components of the engine and generated glue code, we isolate the application development from the engine. Furthermore the template language allows us to define and use custom macros that isolate low-level optimizations from the numerical scheme described in the templates.
We present three use cases, each focusing on one of our user roles, showcasing how the design of the code generation modules allows to easily expand the solver schemes to support novel demands from applications, to add optimized algorithmic schemes (with reduced memory footprint, e.g.), or provide improved low-level SIMD vectorization support.