Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: [OMPI devel] RFC: MPI Interface Extensions Infrastructure
From: Josh Hursey (jjhursey_at_[hidden])
Date: 2009-05-11 14:37:20


What: Infrastructure for MPI Interface Extensions

Why: Allow for experimentation with new interfaces without changing
mpi.h

Where: Temporary Mercurial branch (link below)
    http://cgi.cs.indiana.edu/~jjhursey/public-tmp/hg/hgwebdir.cgi/mpi-ext/

When: Apply on trunk before branching for v1.5

Timeout: 2 weeks - May 26, 2009 after the teleconf.

---------------------------------------------------------------------
Description:

At times developers want to expose non-standard, optional interfaces
to users. These interfaces may represent MPI interfaces to be
presented to the MPI Forum for standardization. In order to add such
an interface to Open MPI you must add it directly to the ompi/mpi/
directory and mpi.h. The combination of standard and non-standard
interfaces inside mpi.h becomes troublesome to many developers and
users.

This branch allows developers to create a directory under ompi/mpiext/
for their extension (see ompi/mpiext/example in the HG branch for an
example). By default, all extensions are disabled. They can be enabled
through a configure option '--enable-ext='. This option takes a list
of extensions that should be built as part of Open MPI. The user can
include all of the extensions by referencing the appropriate header
file (e.g., #include <mpi-ext.h> ), and compiling with the normal
wrapper compilers (e.g., mpicc).

This infrastructure was designed and discussed on July 2, 2008 at an
Open MPI developers meeting directly following an MPI Forum meeting. I
have been developing this branch over the past few months under the
advisement of Jeff and Brian. The C interface is functional and
stable. The C++, F77, and F90 interfaces have not been completed.
There are comments in the appropriate build system files (particularly
config/ompi_ext.m4) that indicate where a developer would need to
focus to finish support for these language bindings if needed. I have
not completed them since I do not feel comfortable enough at this time
with these languages to provide such functionality.

I would like to bring this into the trunk before v1.5 branch. Having
the infrastructure in the trunk will make it easier to maintain off-
trunk experimental interface development.

As part of this RFC, I will also update the 'MPI Extensions' wiki page
to describe how a developer can get started using this infrastructure:
   https://svn.open-mpi.org/trac/ompi/wiki/MPIExtensions

---------------------------------------------------------------------
How to use the branch:

Configure with this additional option:
  --enable-ext=example

Compile the following sample MPI program with 'mpicc' per usual.
/*---------------------------------*/
#include <stdio.h>
#include <mpi.h>
#include <mpi-ext.h>

int main(int argc, char *argv[])
{
     int rank, size;

     MPI_Init(&argc, &argv);

     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &size);

     OMPI_Progress("Go OMPI! Go!");

     MPI_Finalize();

     return 0;
}
/*---------------------------------*/