FlexMPI distribution includes several uses cases of applications and numerical kernels that have been integrated in the framework. The use cases have different characteristics in terms of CPU, communication and I/O intensity levels as well as different locality degrees in the access to the data. The current uses cases are:
- Jacobi, an iterative algorithm for solving a diagonally dominant system of linear equations that are represented by a dense matrix. The provided use case is a variation of the original one that alternates CPU, communication and I/O phases. Jacobi use case can be tuned by adjusting the weight of each phase in order to adjust its performance. In this way, it is possible to configure Jacobi to be compute, communication or I/O intensive (or any intermediate balance between these profiles).
- Conjugate Gradient, an algorithm for the numerical solution of systems of linear equations that are represented as sparse matrices. This kernel is an example of a CPU-intensive code with irregular memory accesses and different levels of data locality (that depend on the sparse matrix characteristics). CG alternates CPU and communication phases.
- EpiGraph, a scalable, fully distributed simulator that is able to perform large scale and realistic stochastic simulations of the propagation of the flu virus. EpiGraph uses sparse matrices extracted from social networks to represent the individual connections. Consequently, the memory access patterns are mostly irregular. The communications are the dominant component in the application execution. A more detailed description of EpiGraph can be found in the project web page.