A C++ framework for generating and executing task graphs
The ever-growing demand of increased simulation complexity to better model physical phenomena requires, among other things, the combination of different simulation components. This combination can be, for example, realized, by using the output of one tool as an input for another one. From a software point of view, this problem can be modeled as a task graph, which is governed by a software framework. The individual simulation tools can be seen as vertices of the task graph, which are therefore executed based on the individual task dependencies. To improve the efficiency and therefore reduce the overall run-time of the framework, a parallelized approach for the task execution is required. A high-degree of flexibility is provided by a distributed approach based on the Message Passing Interface (MPI), as the execution can be spread among the nodes of a large-scale cluster environment as well as on the cores of a single workstation. In general, the distribution of parallelizable tasks among distributed and shared computing resources is a typical way to improve the overall run-time performance of a task graph.
ViennaX is our approach for a lightweight plugin execution framework in C++. There is a strong focus on a small code base, therefore we make extensive use of already available functionality, like the Boost libraries. By re-using already available functionality we are able to achieve a highly concise user-level code, by simultaneously obtaining excellent scalability with regard to the execution performance.
- Flexible plugin system
- Plugin data exchange via data sockets for arbitrary datatypes
- Serial scheduler
- Parallel MPI-based scheduler
- Support for loops in the task graph
- Configuration via XML-based data
- CMake examples and tests
- Header only
More information can be found at http://viennax.sourceforge.net/