I have some questions originally motivated by some mpif-h/MPI_Mprobe
failures we've seen in SPARC MTT runs at 64-bit in both v1.7 and v1.9,
but my poking around spread out from there.
The main issue is this. If I go to ompi/mpi/fortran/mpif-h, I see six
files (*recv_f and *probe_f) that take status arguments. Normally, we
do some conversion between Fortran and C status arguments. These files
test if OMPI_SIZEOF_FORTRAN_INTEGER==SIZEOF_INT, however, and bypass the
conversion if the two types of integers are the same size. The problem
with this is that while the structures may be the same size, the C
status has a size_t in it. So, while the Fortran INTEGER array can
start on any 4-byte alignment, the C status can end up with a 64-bit
pointer on a 4-byte alignment. That's not pleasant in general and can
incur some serious hand-slapping on SPARC. Specifically, SPARC/-m64
errors out on *probe and *recv with MPI_PROC_NULL sources. Would it be
all right if I removed these "shorts cuts"?
Here are two more smaller issues. I'm pretty sure about them and can
make the appropriate changes, but if someone wants to give feedback...
1) If I look at, say, the v1.7 MPI_Mprobe man page, it says:
A matching probe with MPI_PROC_NULL as source returns
message = MPI_MESSAGE_NULL...
In contrast, if I look at ibm/pt2pt/mprobe_mpifh.f90, it's checking the
message to be MPI_MESSAGE_NO_PROC. Further, if I look at the source
code, mprobe.c seems to set the message to "no proc". So, I take it the
man page is wrong? It should say "message = MPI_MESSAGE_NO_PROC"?
2) Next, looking further at mprobe.c, it looks like this:
int MPI_Mprobe(int source, int tag, MPI_Comm comm,
MPI_Message *message, MPI_Status *status)
{
if (MPI_PROC_NULL == source) {
if (MPI_STATUS_IGNORE != status) {
*status = ompi_request_empty.req_status;
*message = &ompi_message_no_proc.message;
}
return MPI_SUCCESS;
}
......
}
This means that if source==MPI_PROC_NULL and status==MPI_STATUS_IGNORE,
the message does not get set. The assignment to *message should be
moved outside the status check, right?