Message Passing Interface for ROOT
- What is mpi?
- Status Summary
- rootmpi (command line tool)
- Basic prototype examples
An Interface Specification:
MPI = Message Passing Interface, is an specification for the developers and users of message passing libraries. By itself, it is NOT a library - but rather the specification of what such a library should be.
Simply stated, the goal of the Message Passing Interface is to provide a widely used standard for writing message passing programs. The interface attempts to be, practical, portable, efficient and flexible.
More information in Message Passing Interface (MPI)
ROOTMpi is a message passing interface for ROOT based in MPI standard that uses libraries with implementations like OpenMPI, Mpich, MVAPICH etc..
The motivation was the Integration of MPI and ROOT technologies in a framework for
parallel computing that:
- Allows to communicate ROOT objects through processes.
- Implement MPI with a better design for ROOT.
- Create an interface that uses the new C++ features to write parallel code.
- Implement ROOT algorithms in parallel for HPC/Grid systems.
In this new design we provide a set of classes that lets to write parallel code easily without dealing with low level code of standard MPI.
Prototype is going under development with the next features
- Peer to Peer communication
- Some collective operation implemented
- Blocking and non-blocking communication.
- Tested with OpenMPI and MPICH using CTest
The code can be found at
It can be compiled with OpenMPI or Mpich libraries, to enable it with for compilation in ROOT just run
cmake -Dmpi=ON ..
Simplified UML class diagram for:
|Classes to created messages for communicators using serialization||Classess to process requests in non-blocking communication|
|TCommunicator||Base class for all communcators, to perform p2p and collective communications||DONE|
|TIntraComminicator||Class to do communications in the same context||Almost DONE|
|TInterComminicator||Class to perform communication between different contexts||DONE|
|TRequest, TPrequest and TGrequest||Classes to handle nonbloking communication||DONE|
|TEnvironment||Class initialize/finalize communication system with some utility methods||DONE|
|TMpiMessage and TMpiMessageInfo||Classes for serialization of the objects in the communication that uses ROOT I/O features.||DONE|
|Error Handling||MPI error are very hard to understant also for MPI experts, improve the error handling.||Progress|
|Tests Siute||Tests for all features in ROOTMpi||Progress|
|Documentation and Tutorials||Api documentation, examples and tutorials||Progress|
|TCartCommunicator||Class for Cartesian Communicator.||TODO|
|TGraphCommunicator||Class for Graph communicator.||TODO|
|MPI File||Class manage distribute file.||TODO|
|Memory Window||Class to shared regions of memory with Remote Access Memory||TODO|
|Fault Tolerance||System that lets to continue MPI execution in case of fault, it is currently under design and development by MPI community. http://mpi-forum.org/mpi-40/||TODO|
|Benchmark Tools||Classes or tools to perform benchmark in clusters and grids using also job schedulers||TODO need design|
requires OpenMpi >= 1.8 and Mpich >= 1.5 that supports Ibcast