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