A precompiler to reduce the memory footprint of multiscale PDE solvers in C++

A PDE solver's value is increasingly co-determined by its memory footprint, as the increase of computational multicore power overtakes the memory access speed, and as memory restricts the maximum experiment size. Tailoring a code to require less memory is technical challenging, error-prone, and hardware-dependent. Object-oriented code typically consumes much memory, though developers favour such high-level languages offering meaningful models and good maintainability. We augment the language C++ with new keywords branding records to be memory-critical. Our precompiler DaStGen then transforms this augmented specification into plain C++ optimised for low memory requirements. Hereby, it encodes multiple attributes with fixed range within one variable, and it reduces the number of bits per floating point value. The tool also generates one user-defined MPI data type per class and, thus, facilitates the construction of parallel codes with small messages.

[1]  Laurie J. Hendren,et al.  SableCC, an object-oriented compiler framework , 1998, Proceedings. Technology of Object-Oriented Languages. TOOLS 26 (Cat. No.98EX176).

[2]  Hans-Joachim Bungartz,et al.  DaStGen-A Data Structure Generator for Parallel C++ HPC Software , 2008, ICCS.

[3]  Hans-Joachim Bungartz,et al.  Numerical Simulation of Particle Transport in a Drift Ratchet , 2008, SIAM J. Sci. Comput..

[4]  Miriam Mehl,et al.  A cache‐oblivious self‐adaptive full multigrid method , 2006, Numer. Linear Algebra Appl..

[5]  Gene H. Golub,et al.  Matrix computations , 1983 .

[6]  Roger Hillson,et al.  C++2MPI: a software tool for automatically generating MPI datatypes from C++ classes , 2000, Proceedings International Conference on Parallel Computing in Electrical Engineering. PARELEC 2000.

[7]  Christian Becker,et al.  Hardware-oriented numerics and concepts for PDE software , 2006, Future Gener. Comput. Syst..

[8]  Éric Renault Extended MPICC to Generate MPI Derived Datatypes from C Datatypes Automatically , 2007, PVM/MPI.

[9]  Randall Hyde Write Great Code, Volume 2: Thinking Low-Level, Writing High-Level , 2004 .

[10]  Michael Griebel,et al.  Multilevelmethoden als Iterationsverfahren über Erzeugendensystemen , 1994 .

[11]  Roger Atkinson,et al.  Project management: cost, time and quality, two best guesses and a phenomenon, its time to accept other success criteria , 1999 .

[12]  Gregor Kiczales,et al.  Aspect-oriented programming , 1996, CSUR.