[Mpi3-rma] Request-Based RMA Example
James Dinan
dinan at mcs.anl.gov
Tue Apr 19 16:31:00 CDT 2011
Hi All,
Example is below, please give any feedback. I'll work on compressing
this down the match the format in the writeup.
Caption: The following example shows how request-based operations can be
used to overlap communication with computation. Each process fetches,
processes, and writes the result for $NSTEPS$ chunks of data. Instead
of a single buffer, $M$ local buffers are used to allow up to $M$
communication operations to overlap with computation.
~Jim.
---snip---
int i, j;
MPI_Window win;
MPI_Request put_req[M] = { MPI_REQUEST_NULL };
MPI_Request get_req;
double data[M][N];
/* Create win: size M*N*sizeof(double), displacement unit MPI_DOUBLE */
MPI_Win_lock_all(0, win);
for (i = 0; i < NSTEPS; i++) {
MPI_Waitany(M, put_req, &j, MPI_STATUS_IGNORE);
MPI_RGet(data[j], N, MPI_DOUBLE, target, i*N, N, MPI_DOUBLE, win,
&get_req);
MPI_Wait(get_req);
compute(i, data[M], ...);
MPI_RPut(data[j], N, MPI_DOUBLE, target, i*N, N, MPI_DOUBLE, win, &R[j]);
}
MPI_Waitall(M, put_req, MPI_STATUSES_IGNORE);
MPI_Win_unlock_all(win);
More information about the mpiwg-rma
mailing list