You could just define your own library with the same signatures as official MPI functions, and link that into MPI applications. Under the covers, you invoke the PMPI_* equivalents of each function. Lots of profiling and analysis tools work this way. For example:

int MPI_Init(int argc, char **argv)
{
    /* do whatever you want to do here */
    ret = PMPI_Init(argc, argv);
    /* do whatever you want to do here */
    return ret;
}

compile/link that into libextra_mpi_stuff.a. Then compile your app with:

   mpicc my_mpi_app.c -lextra_mpi_stuff

and then when mpi_mpi_app.c calls MPI_Init(), it'll call *your* MPI_Init. Your MPI_Init will do whatever it wants to, and invoke PMPI_Init() (i.e., the "real" init function) and return back to the user.

This is the profiling interface of MPI.


On May 13, 2009, at 1:20 PM, Le Duy Khanh wrote:

Dear,

I intend to override some MPI functions such as MPI_Init, MPI_Recv... but I don't want to dig into OpenMPI source code.Therefore, I am thinking of a way to create a lib called "mympi.h" in which I will #include "mpi.h" to override those functions. I will create a new interface with exactly the same signatures like MPI_Init (because users are familiar with those functions). However, the problem is that I don't know how to override those functions because as I know, C/C++ doesn't allow us to override functions (only overload them).

Could you please show me how to override OMPI functions but still keep the same function names and signatures?

 Thank you so much for your time and consideration

Le , Duy Khanh
Cellphone: (+84)958521704
Faculty of Computer Science and Engineering
Ho Chi Minh city University of Technology , Viet Nam

_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users


--
Jeff Squyres
Cisco Systems

Reply via email to