I'm trying to get some code working using request-based RMA (MPI_Rput, MPI_Rget, MPI_Raccumulate). My understanding of the MPI 3.0 standard is that after calling MPI_Wait on the request handle, the local buffers should be safe to use. On calling MPI_Win_flush_all on the window used for RMA operations, all operations should be completed on the remote processor. Based on this, I would expect that the following program should work:
#include <mpi.h> int main(int argc, char *argv[]) { int bytes = 4096; MPI_Win win; void *buf; MPI_Init(&argc, &argv); MPI_Alloc_mem(bytes,MPI_INFO_NULL, &win); MPI_Win_create(buf,bytes,1,MPI_INFO_NULL,MPI_COMM_WORLD,&win); MPI_Win_flush_all(win); MPI_Win_free(&win); MPI_Finalize(); return(0); } However, with openmpi-1.8.3 I'm seeing a crash [node302:3689] *** An error occurred in MPI_Win_flush_all [node302:3689] *** reported by process [2431516673,0] [node302:3689] *** on win rdma window 3 [node302:3689] *** MPI_ERR_RMA_SYNC: error executing rma sync [node302:3689] *** MPI_ERRORS_ARE_FATAL (processes in this win will now abort, [node302:3689] *** and potentially your MPI job) I'm seeing similar failures for mvapich2-2.1 and mpich-3.2. Does anyone know if this stuff is suppose to work? I've had pretty good luck using the original RMA calls (MPI_Put, MPI_Get and MPI_Accumulate) with MPI_Lock/MPI_Unlock but the request-based calls are mostly a complete failure. Bruce Palmer