[Beowulf] use a MPI library thought a shared library

Mathieu Gontier mg.mailing-list at laposte.net
Tue Dec 4 11:03:34 PST 2007


Hi all,

I am currently working with a project named MorphMPI. Its main purpose 
is to offer a generic interface for the developers of parallel 
applications, and chose the MPI library/interconnect at the runtime by 
rebuilding a shared morph library against the desire MPI library. (The 
final application is linked against a shared morph library instead of 
the real MPI library.)
For more information about that, you can follow these links:
- http://www.clustermonkey.net//content/view/213/32/
- http://sourceforge.net/projects/morphmpi

So, I meet a little problem whatever the MPI library used (I tried with 
MPICH-1.2.5.2, MPICHGM and IntelMPI).
When MorphMPI is  linked statically with my parallel application, 
everything is ok; but when MorphMPI is  linked dynamically with my 
parallel application, MPI_Get_count return a wrong value.

I concluded it is difficult to use a MPI library thought a shared 
library. I wonder if someone have more information about it (in this 
case, you're welcome ;-) )

Thank you for your support,
Mathieu.

PS: my problem happens in the the following example,

#  include<morphmpi.h>

#  include <mpi.h>

#include<stdio.h>


int main( int argc, char* argv[] )

{

  int np, me, ier, flag=0, msglen=-1 ;

  MorphMPI_Request request ;

  MorphMPI_Status status ;

  int buf[1] ; buf[0]=-1 ;


  ier = MorphMPI_Init( &argc, &argv ) ;

  ier = MorphMPI_Comm_size( MorphMPI_COMM_WORLD, &np ) ;

  ier = MorphMPI_Comm_rank( MorphMPI_COMM_WORLD, &me ) ;


  if( me > 1 ) printf( "I am the useless processor #%d on %d\n", me, np ) ;

  else printf( "I am the working processor #%d on %d\n", me, np ) ;


  ier = MorphMPI_Barrier( MorphMPI_COMM_WORLD ) ;


printf( "<<< %d >>>\n", &status ) ;


  if( ! me ) {

    buf[0] = 69 ;

    ier = MorphMPI_Isend( buf, 1, MorphMPI_INT, 1,1, MorphMPI_COMM_WORLD, &request ) ;

    ier = MorphMPI_Wait( &request, &status ) ;

  }


  ier = MorphMPI_Barrier( MorphMPI_COMM_WORLD ) ;


  if( me == 1 ) {

    ier = MorphMPI_Irecv( buf, 1, MorphMPI_INT, 0, 1, MorphMPI_COMM_WORLD, &request ) ;

    ier = MorphMPI_Wait( &request, &status ) ;

    ier = MorphMPI_Get_count( &status, MorphMPI_INT, &msglen ) ;


    if( msglen != 1 ) printf( "ERROR: The lengh of the message is not 1\n" ) ;

    else printf( "SUCCESS !\n" ) ;

  }


  ier = MorphMPI_Finalize() ;

}



-- 
Mathieu Gontier
Core Development Engineer

Read the attached v-card for telephone, fax, adress
Look at our web-site http://www.fft.be
 




More information about the Beowulf mailing list