Use a plugin
To activate a plugin, select the checkbox next to it, then run your application.
Plugins can automatically perform one or more of the following actions:
Load a particular dynamic library into your program
Pause your program and show a message when a certain event such as a warning or error occurs
Start extra, optionally hidden MPI processes. See Write a plugin for more details.
Set tracepoints that log the variables during an execution.
If one of the plugins you have selected cannot be loaded, check that the program is correctly installed, and that the paths inside the XML plugin file match the installation path of the program.
Example Plugin: MPI History Library
The plugin
directory contains a small set of files that make a
plugin to log MPI communication.
Makefile
- Builds the library and the configuration file for the plugin.README.wrapper
- Details the installation, usage, and limitations.wrapper-config
- Used to create the plugin XML config file. Used to preload the library and set tracepoints to log the correct variables.wrapper-source
- Used to automatically generate the source code for the library which will wrap the original MPI calls.
This plugin is designed to wrap around many of the core MPI functions and seamlessly intercept calls to log information which is then displayed. It is targeted at MPI implementations that use dynamic linking, as this can be supported without relinking the debugged program.
Static MPI implementations can be made to work as well, but this is outside the scope of this version.
This package must be compiled before first use so it is compatible with your MPI version. When compiled it will be listed in the user interface.
To install as a non-root user in your local directory, type:
make local
To install as root in the plugins
directory, type:
make
To enable the plugin, click Details to expand the Plugins section of the Run window. Then select History v1.0, and start your job as normal. The library will preload and set default tracepoints.
This plugin records call counts, total sent byte counts, and the arguments used in MPI function calls. Function calls and arguments are displayed (in blue) in the Input/Output tab.
The function counts are available in the form of the variable _MPIHistoryCount_{function}
.
The sent bytes counters are accumulated for most functions, but
specifically they are not added for the vector operations such as
MPI_Gatherv
.
These count variables within the processes are available for use, in components such as the Cross-Process Comparison View, enabling a check that, for example, the count of MPI_Barriers is consistent, or primitive MPI bytes sent profiling information to be discovered.
The library does not record the received bytes, as most MPI receive
calls in isolation only contain a maximum number of bytes allowed,
rather than bytes received. The MPI status is logged, the SOURCE
tag
therein enables the sending process to be identified.
There is no per-communicator logging in this version.
This version is for demonstration purposes for the tracepoints and plugin features. It could generate excessive logged information, or cause your program to run slowly if it is a heavy communicator.
This library can be easily extended, or its logging can be reduced, by
removing the tracepoints from the generated history.xml
file (stored
in FORGE_FORGE_PATH
or ~/.allinea/plugins
). This would make execution considerably
faster, but still retain the byte and function counts for the MPI functions.