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
In the future, real buffered communication will be available.

Last updated November 28, 2010 by Erik Demaine.