Dear OpenMPI developers, we found a strange behavior when using MPI-RMA passive target and OpenMPI (versions 1.8.3 and 1.10.2). We don't see any problem when using MPICH.
This is a small example on what we want to do: =================== program rma_openmpi use mpi integer :: nproc, rank, ierr integer :: win, request, size INTEGER(kind=mpi_address_kind) :: size_aint, disp_aint integer, DIMENSION(:), ALLOCATABLE :: meta, recv call MPI_INIT(ierr) call MPI_COMM_SIZE(MPI_COMM_WORLD, nproc, ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) size=100 ALLOCATE(meta(size),recv(size)) meta(:) = rank recv(:) = -1 size_aint = size*4 call MPI_WIN_CREATE(meta,size_aint,4,MPI_INFO_NULL,MPI_COMM_WORLD,win,ierr) call MPI_WIN_LOCK_ALL(MPI_MODE_NOCHECK, win, ierr) disp_aint = 0 CALL MPI_RGET(recv,size,MPI_INTEGER,MOD(rank+1,2),disp_aint,& size,MPI_INTEGER,win,request,ierr) IF (ierr .NE. 0) STOP "error mpi_rget" CALL MPI_WAIT(request,MPI_STATUS_IGNORE,ierr) IF (ierr .NE. 0) STOP "error mpi_wait" ! call MPI_Win_flush_all(win,ierr) print *,rank,"=",recv(1) call MPI_WIN_UNLOCK_ALL(win, ierr) call MPI_WIN_FREE(win,ierr) DEALLOCATE(meta) call MPI_FINALIZE(ierr) end program rma_openmpi =================== You can run with 2 ranks. As you can see it is a simple rget operation from the neighbor rank. However, it seems that the communications doesn't complete after the mpi_wait. Indeed we get: 0 = -1 1 = -1 while it should be: 0 = 1 1 = 0 The code works as we want by uncommenting the flush operation, but we would expect the same behavior with such a synchronization. Thanks for your help! Best regards, Alfio