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