Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2006-07-20 18:53:46

On 7/17/06 12:37 AM, "Mahesh Barve" <barvemahesh_at_[hidden]> wrote:

> Can anyone please enlighten us about what really
> happens in MPI_init() in openMPI?

This is quite a complicated question. :-)

> More specifically i am interested in knowing
> 1.Functions that needs to accomplished during
> MPI_init()
> 2.What has already been implemented in openMPI
> MPI_Init
> 2. The routines called/invoked that perform these
> functions

Many, many things happen in MPI_INIT. Here's a sample:

- setup the lowest layer of the system (OPAL)
- setup the run-time environment (ORTE)
  - find out our rank in MPI_COMM_WORLD
  - find out how many peers we have and who they are
  - find out how to contact our peers
- setup the progression engine
- setup processor affinity (if desired)
- setup all the various component frameworks to implement much of the MPI
  - setup our MPI point-to-point channels
    - publish information on how peer processes can contact me
    - receive information on how to contact peer processes
  - setup MPI collectives
  - setup MPI topologies
  - ...etc.
- setup all the MPI handle processing (MPI_Comm, MPI_Datatype, etc.)
  - initialize pre-defined handles
  - create fortran translation tables
- ...etc.

I would suggest that you look through ompi/runtime/ompi_mpi_init.c. It's
basically a big dispatch function of all the events that occur during
MPI_INIT (i.e., both MPI_INIT and MPI_INIT_THREAD -- ompi/mpi/c/init.c and
ompi/mpi/c/init_thread.c, respectively -- call this function to do all the

The list of things that it does is quite explicit. Note that the ordering
of functions in this function is extremely important -- almost all the
functions are strictly ordered because of explicit or implicit dependencies.

Does that help?

Jeff Squyres
Server Virtualization Business Unit
Cisco Systems