Core Concepts
KaMPIng provides flexible and (near) zero-overhead C++ bindings for the Message-Passing Interface (MPI) that cover all abstraction levels from low-level MPI calls to convenient STL-style bindings, enabling rapid prototyping and fine-tuning of runtime behavior and memory management.
Abstract
The article presents KaMPIng, a new approach to designing C++ bindings for the Message-Passing Interface (MPI). Key highlights:
Parameter Handling:
KaMPIng introduces a flexible parameter handling system that allows computing default parameter values based on a small subset of provided parameters, reducing verbosity and boilerplate.
Users can control memory allocation by specifying resize policies for output parameters.
Type System:
KaMPIng provides a flexible type system that supports both static and dynamic MPI data types, with automatic type construction at compile-time.
Transparent serialization support is provided for communicating complex data types.
Safety Guarantees:
KaMPIng introduces memory-safe abstractions for nonblocking communication, preventing illegal memory accesses.
Extensive compile-time and runtime error checking is provided through assertions and exceptions.
Extensibility:
KaMPIng's plugin architecture allows easy integration of additional functionality, such as specialized collectives for sparse and low-latency communication, fault-tolerance, and reproducible reduction operations.
The article demonstrates the applicability of KaMPIng through various real-world application benchmarks, including sorting, graph algorithms, and phylogenetic inference. KaMPIng is shown to provide a significant reduction in code complexity compared to using plain MPI or other C++ bindings, while maintaining (near) zero-overhead performance.
Stats
The article does not contain any key metrics or important figures to support the author's key logics.
Quotes
The article does not contain any striking quotes supporting the author's key logics.