I have an MPI code that was developed using MPICH1 and OpenMPI before the MPI2 
standards became commonplace (before MPI_IN_PLACE was an option).

So, my code has many examples of GATHERV, AGATHERV and SCATTERV, where I pass 
the same array in as the SEND_BUF and the RECV_BUF, and this has worked fine 
for many years.

Intel MPI and MPICH2 explicitly disallow this behavior according to the MPI2 
standard. So, I have gone through and used MPI_IN_PLACE for all the 
GATHERV/SCATTERVs that used to pass the same array twice. This code now works 
with MPICH2 and Intel_MPI, but fails with OpenMPI-1.6.5 on multiple platforms 
and compilers.

PLATFORM                  COMPILER            SUCCESS? (For at least one simple 
example)
------------------------------------------------------------
SLED 12.3 (x86-64) - Portland group  - fails
SLED 12.3 (x86-64) - g95                         - fails
SLED 12.3 (x86-64) - gfortran               - works

OS X 10.8                 -- intel                        -fails


In every case where OpenMPI fails with the MPI_IN_PLACE code, I can go back to 
the original code that passes the same array twice instead of using 
MPI_IN_PLACE, and it is fine.

I have made a test case doing an individual GATHERV with MPI_IN_PLACE, and it 
works with OpenMPI.  So it looks like there is some interaction with my code 
that is causing the problem. I have no idea how to go about trying to debug it.


In summary:

OpenMPI-1.6.5 crashes my code when I use GATHERV, AGATHERV, and SCATTERV with 
MPI_IN_PLACE.
Intel MPI and MPICH2 work with my code when I use GATHERV, AGATHERV, and 
SCATTERV with MPI_IN_PLACE.

OpenMPI-1.6.5 works with my code when I pass the same array to SEND_BUF and 
RECV_BUF instead of using MPI_IN_PLACE for those same GATHERV, AGATHERV, and 
SCATTERVs.


-Charles

Reply via email to