ParallelZone Architecture
Designing ParallelZone describes the top-level design decisions which went into establishing ParallelZone’s scope. Here we lay out the architecture of ParallelZone. The overall architecture is shown in Figure: Fig. 5.
The outer box labeled “ParallelZone” delimits the contents of the ParallelZone library from its dependencies. The box labeled “RuntimeView” delimits the user-centric API from the implementation details.
Note
At the moment ParallelZone has no schedulers. The “Schedulers” box is thus presently a placeholder.
Notable design points:
Exposure of a task-based parallel runtime via “Schedulers” component.
MPI under the hood ensures backwards compatibility.
Hardware introspection via “Hardware” component.
The following sections describe the ParallelZone components in more detail. The sections are ordered such that they work their way up the software stack.
Dependencies
ParallelZone presently has one dependency: Cereal.
Cereal
See Serialization Design for decisions underpinning the usage of Cereal. Long story short, we need serialization and Cereal is a lightweight library implementing it.
MPI Helpers
Main discussion Designing CommPP Class.
The MPI standard exposes C APIs. “Proper” C++ MPI bindings should automate much of the call to the C API. More specifically, by using template meta-programming it is possible to perform type introspection and automatically determine things like: what the object’s type is, and how many are being sent/received. The MPI Helpers component implements “proper” C++ MPI bindings, which are then used by the rest of ParallelZone.
Hardware
Todo
Document design and link to it.
Logging
Main page: Designing the Logging Component.
The logging component is used for recording events that occur while ParallelZone (and software built on ParallelZone) run. Events include: important results, timing information, or problems.
Schedulers
Todo
Write this section when more design has gone into the Schedulers.
Serialization
Todo
Design the user-facing serialization API.
The Serialization component is primarily meant to support the “RuntimeView” component, but given its utility to downstream repositories, the serialization component is formally exposed as part of the user-centric API.
RuntimeView
Main page: Designing ParallelZone’s Parallel Runtime.
The “RuntimeView” component is the top-level API of ParallelZone. The name “RuntimeView” is chosen to illustrate that it doesn’t own the resources in the runtime environment, but simply aliases them (the resources in the runtime environment are mostly owned by the operating system).