Archives


- Beowulf
- Beowulf Announce
- Scyld-users
- Beowulf on Debian

[Beowulf] use a MPI library thought a shared library

Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.

Search

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