๐ค AI Summary
This paper identifies a fundamental semantic tension between MPI and modern C++โmanifesting in type safety, RAII-based object lifetime management, and communication buffer semantics (value semantics vs. raw pointers)โand exposes multiple ambiguities and inconsistencies in the MPI standard.
Method: We propose a concept-driven design paradigm grounded in C++20 Concepts, constraints, `std::span`, and move semantics, moving beyond syntactic wrapper libraries to formally model and verify semantic consistency across abstractions.
Contribution/Results: Our analysis clarifies three core design conflicts, pinpoints several standard ambiguities, and establishes foundational design principles and a theoretical framework for high-performance, portable, and idiomatic C++ MPI bindings. The work provides both a rigorous conceptual foundation and a practical pathway toward community-standardized, semantically sound C++ MPI interfaces.
๐ Abstract
Since the C++ bindings were deleted in 2008, the Message Passing Interface (MPI) community has revived efforts in building high-level modern C++ interfaces. Such interfaces are either built to serve specific scientific application needs (with limited coverage to the underlying MPI functionalities), or as an exercise in general-purpose programming model building, with the hope that bespoke interfaces can be broadly adopted to construct a variety of distributed-memory scientific applications. However, with the advent of modern C++-based heterogeneous programming models, GPUs and widespread Machine Learning (ML) usage in contemporary scientific computing, the role of prospective community-standardized high-level C++ interfaces to MPI is evolving. The success of such an interface clearly will depend on providing robust abstractions and features adhering to the generic programming principles that underpin the C++ programming language, without compromising on either performance and portability, the core principles upon which MPI was founded. However, there is a tension between idiomatic C++ handling of types and lifetimes, and, MPI's loose interpretation of object lifetimes/ownership and insistence on maintaining global states. Instead of proposing"yet another"high-level C++ interface to MPI, overlooking or providing partial solutions to work around the key issues concerning the dissonance between MPI semantics and idiomatic C++, this paper focuses on the three fundamental aspects of a high-level interface: type system, object lifetimes and communication buffers, also identifying inconsistencies in the MPI specification. Presumptive solutions can be unrefined, and we hope the broader MPI and C++ communities will engage with us in productive exchange of ideas and concerns.