TOMPI Frequently Asked Questions
See also the main TOMPI page.
Fortran support
A lot of people have requested support for Fortran programs.
Unfortunately, this is a difficult problem. Calling C routines from Fortran
is not so much of a problem; the difficulty is with global variables. TOMPI
uses threads to implement MPI processes. This means that global variables are
shared by all the MPI processes, which is probably not the desired effect.
To solve this problem, I've written a preprocessor for C code (run by mpicc)
that converts global variables into thread-specific data. To support Fortran,
one would have to write an analogous preprocessor for Fortran code.
It will be a while before I can write such a preprocessor for Fortran. If your
Fortran code is thread-safe, you can use TOMPI. Otherwise, I'm afraid you'll
have to use another alternative, e.g. MPICH.
If you know someone that would be interested in helping me write a Fortran
preprocessor, please let me know.
Buffered Communication
TOMPI currently does not support buffered communication. If you use it, but
do not require them in a single-processor environment (i.e., synchronization
will not cause your program to deadlock), then you can use the following fix
in C.
#ifdef TOMPI
#define MPI_Bsend MPI_Ssend
#define MPI_Bsend_init MPI_Ssend_init
#define MPI_Ibsend MPI_Issend
#define MPI_Buffer_attach(buffer,size)
#define MPI_Buffer_detatch(buffer,size)
#define MPI_Rsend MPI_Ssend
#define MPI_Irsend MPI_Issend
#define MPI_Rsend_init MPI_Ssend_init
#endif
In the future, real buffered communication will be available.