Most tools targeting MPI rely on the MPI Profiling Interface (PMPI), which allows tools to transparently intercept invocations to MPI routines and with that to establish wrappers around MPI calls to gather execution information. However, the usage of this interface is limited to a single tool. PnMPI eliminates the restriction of a single PMPI tool layer per execution. It can dynamically load and chain multiple PMPI tools into a single tool stack and then interject this complete stack between the target application and the library without changing the view for each individual tool. It enables the user to combine arbitrary MPI tools without having to reimplement them. A registration mechanism enables modules to offer services to other modules loaded by PnMPI and thereby enables code reuse by modularizing common tasks, like datatype flattening or request tracking, without having to recode them in every tool.
Open source: LGPL
Lawrence Livermore National Laboratory