Message Passing Interface for ROOT

Mpi Logo


What is mpi?

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
already implemented

  • Peer to Peer communication
  • Some collective operation implemented
    • Gather/AllGtaher
    • Scatter/AllScatter
    • Redude/AllReduce
    • Bcast
  • Communicators
    • Intra-Communicator
    • Inter-Communicator
  • 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 ..

Classes Design

Simplified UML class diagram for:


Classes to created messages for communicators using serialization Classess to process requests in non-blocking communication
ROOTMpiMessagesSeriazation ROOTMpiRequets

Status Summary

TCommunicatorBase class for all communcators, to perform p2p and collective communicationsDONE
TIntraComminicatorClass to do communications in the same context Almost DONE
TInterComminicatorClass 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 methodsDONE
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 ROOTMpiProgress
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 MemoryTODO
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


Related Sites