Initialization * MPI_Win_create(base, size, disp_unit, info, comm, win) * collectively creates a MPI Window from a set of local windows (zero or one window for each process) residing within the set of processes defined by the specified communicator * base, size - defines the region of memory which represents the local window for the calling process * if locks are to be used, the implementation may require that this region of memory be allocated with MPI_Alloc_mem() * disp_unit - multiplier for displacements specified in the communication routines * info - hints to the runtime about the expected usage pattern(s) of the window * no_locks - states that MPI_Win_lock() and MPI_Win_unlock() will not be used with this window * comm - communicator which represent the group of processes participating in the window * MPI_Win_free(win) * frees resources use by the window ---------- Communication operations (requests) * all communication operations are non-blocking * MPI_Put(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win) * target buffer must not overlap with other communcation operations during the same exposure epoch * MPI_Get(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, win) * target buffer must not overlap with other communcation operations during the same exposure epoch * MPI_Accumulate(origin_addr, origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, op, win) * target buffer may overlap with other MPI_Accumulate() operations during the same exposure epoch, but not with MPI_Put() or MPI_Get() operations * operations with overlapping target buffers submitted in the same exposure epoch must atomically update the data elements within the overlapping region ---------- Synchronization * the synchronization operations define epochs * exposure epoch - during an exposure epoch, a process' local window is made accessible to one more other processes in the window group * access epoch - during an access epoch, a process is able to submit communication requests causing operation to be performed with respect to one or more local windows (residing within processes that are part of the window group). these local window must already be exposed (either explicitly/actively or implicitly/passively) by an exposure epoch. * Active target synchronization * Fence MPI_Win_fence(assert, win) * causes all processes to open exposure and access epochs for all local windows * General * Access epoch MPI_Win_start(group, assert, win) MPI_Win_complete(win) * Exposure epoch MPI_Win_Post(group, assert, win) MPI_Win_wait(win) MPI_Win_test(win) * Passive target synchronization MPI_Win_lock(lock_type, rank, assert, win) MPI_Win_unlock(rank, win) * lock_type MPI_LOCK_EXCLUSIVE MPI_LOCK_SHARED