We discuss the use of code generation in the ADER-DG solver ExaHyPE to streamline application development and optimize its performance-critical kernels. The code generation relies on the Jinja2 template engine, with custom template macros isolating low-level optimizations from the algorithms described in the templates. We optimize for Intel Skylake CPUs using Loop-over-GEMM, memory footprint reduction and hybrid data layouts, with benchmarks reaching 30% of peak performance on SuperMUC-NG.
Übersetzte Kurzfassung:
Wir zeigen wie Code-Generierung im ADER-DG-Solver ExaHyPE die Anwendungsentwicklung und Optimierung der leistungsrelevanten Kernel unterstützt. Die Code-Generierung nutzt die Jinja2 Template-Engine, wobei spezielle Makros Low-Level-Optimierungen von den in Templates beschriebenen Algorithmen isolieren. Wir optimieren für Intel Skylake Prozessoren mit Loop-over-GEMM, Reduzierung des Speicherbedarfs und hybriden Datenlayouts, wobei Benchmarks 30% der Spitzenleistung auf SuperMUC-NG erreichen.