An extension of C++ with memory-centric specifications for HPC to reduce memory footprints and streamline MPI development
The C++ programming language and its cousins lean towards a memory-inefficient storage of structs: The compiler inserts helper bits such that individual instance variables fit to byte or cache boundaries, while it is not able to exploit knowledge about the range of integers, enums or bitsets. Furthe...
Saved in:
Main Authors | , , , |
---|---|
Format | Journal Article |
Language | English |
Published |
10.06.2024
|
Subjects | |
Online Access | Get full text |
Cover
Loading…
Summary: | The C++ programming language and its cousins lean towards a
memory-inefficient storage of structs: The compiler inserts helper bits such
that individual instance variables fit to byte or cache boundaries, while it is
not able to exploit knowledge about the range of integers, enums or bitsets.
Furthermore, the language provides neither support for data exchange via MPI
nor for arbitrary floating-point precisions. We propose C++ attributes through
which developers can guide the compiler what memory arrangements would be
beneficial: Can multiple booleans or integers with limited range be squeezed
into one bit field, do floating point numbers hold fewer significant bits than
in the IEEE standard, or does the code benefit from a MPI datatype for subsets
of attributes? The extension offers the opportunity to fall back to normal
alignment via plain C++ assignments, no dependencies upon external libraries
are introduced, and the resulting code remains standard C++ subject to some
weakened guarantees on addresses and pointer arithmetics. Our work implements
the language annotations within LLVM and demonstrates their potential impact,
both upon the runtime and the memory footprint, through smoothed particle
hydrodynamics (SPH) benchmarks. They uncover the potential gains in terms of
performance and development productivity. |
---|---|
DOI: | 10.48550/arxiv.2406.06095 |