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


_______________________________________________
Beowulf mailing list, Beowulf@beowulf.org
To change your subscription (digest mode or unsubscribe) visit 
http://www.beowulf.org/mailman/listinfo/beowulf

Reply via email to