PluginPlay is an inversion-of-control (IoC) framework to facilitate wrtiting high-performance modular scientific software. More specifically, using PluginPlay scientific software is written as a series of disconnected modules. At runtime the modules are loaded into PluginPlay and then PluginPlay wires the modules together to form a call graph. A more detailed overview can be found here.
From the perspective of high-performance scientific software development, the main features enjoyed by a program built on top of PluginPlay are:
- Want to call your new optimizer everwhere an optimizer is needed without modifying those places, or even knowing where those places are? Runtime dependency injection lets you do just that!
- Memoization of the call graph. PluginPlay automatically records the execution of the call graph, which facilitates saving/loading a calcualtion.
- Plugin-based development. In C++ there is no need to recompile anything other than your plugin while developing it. Notably all other plugins and the program consuming the plugins, do not need to be recompiled!
A full feature list can be found here.
PluginPlay ultimately uses CMake for configuring and building. This means that installation is usually achieved via a variation on:
git clone https://github.com/NWChemEx/PluginPlay
cd PluginPlay
cmake -H. -Bbuild -D...
cmake --build build --target install
More detailed install instructions can be found here.
This research was supported by the Exascale Computing Project (17-SC-20-SC), a collaborative effort of the U.S. Department of Energy Office of Science and the National Nuclear Security Administration.