One-sided communication

MPI.Win_createFunction
MPI.Win_create(base[, size::Integer, disp_unit::Integer], comm::Comm; infokws...)

Create a window over the array base, returning a Win object used by these processes to perform RMA operations. This is a collective call over comm.

  • size is the size of the window in bytes (default = sizeof(base))
  • disp_unit is the size of address scaling in bytes (default = sizeof(eltype(base)))
  • infokws are info keys providing optimization hints to the runtime.

MPI.free should be called on the Win object once operations have been completed.

source
MPI.Win_create_dynamicFunction
MPI.Win_create_dynamic(comm::Comm; infokws...)

Create a dynamic window returning a Win object used by these processes to perform RMA operations

This is a collective call over comm.

infokws are info keys providing optimization hints.

MPI.free should be called on the Win object once operations have been completed.

source
MPI.Win_allocate_sharedFunction
win, array = MPI.Win_allocate_shared(Array{T}, dims, comm::Comm; infokws...)

Create and allocate a shared memory window for objects of type T of dimension dims (either an integer or tuple of integers), returning a Win and the Array{T} attached to the local process.

This is a collective call over comm, but dims can differ for each call (and can be zero).

Use MPI.Win_shared_query to obtain the Array attached to a different process in the same shared memory space.

infokws are info keys providing optimization hints.

MPI.free should be called on the Win object once operations have been completed.

source
MPI.Win_shared_queryFunction
array = Win_shared_query(Array{T}, [dims,] win; rank)

Obtain the shared memory allocated by Win_allocate_shared of the process rank in win. Returns an Array{T} of size dims (being a Vector{T} if no dims argument is provided).

source
MPI.Win_flushFunction
Win_flush(win::Win; rank)

Completes all outstanding RMA operations initiated by the calling process to the target rank on the specified window.

External links

source
MPI.Win_lockFunction
Win_lock(win::Win; rank::Integer, type=:exclusive/:shared, nocheck=false)

Starts an RMA access epoch. The window at the process with rank rank can be accessed by RMA operations on win during that epoch.

Multiple RMA access epochs (with calls to MPI.Win_lock) can occur simultaneously; however, each access epoch must target a different process.

Accesses that are protected by an exclusive lock (type=:exclusive) will not be concurrent at the window site with other accesses to the same window that are lock protected. Accesses that are protected by a shared lock (type=:shared) will not be concurrent at the window site with accesses protected by an exclusive lock to the same window.

If nocheck=true, no other process holds, or will attempt to acquire, a conflicting lock, while the caller holds the window lock. This is useful when mutual exclusion is achieved by other means, but the coherence operations that may be attached to the lock and unlock calls are still required.

External links

source
MPI.Get!Function
Get!(origin, win::Win; rank::Integer, disp::Integer=0)

Copies data from the memory window win on the remote rank rank, with displacement disp, into origin using remote memory access. origin can be a Buffer, or any object for which Buffer(origin) is defined.

External links

source
MPI.Put!Function
Put!(origin, win::Win; rank::Integer, disp::Integer=0)

Copies data from origin into memory window win on remote rank rank at displacement disp using remote memory access. origin can be a Buffer, or any object for which Buffer_send(origin) is defined.

External links

source
MPI.Accumulate!Function
Accumulate!(origin, op, win::Win; rank::Integer, disp::Integer=0)

Combine the content of the origin buffer into the target buffer (specified by win and displacement target_disp) with reduction operator op on the remote rank target_rank using remote memory access.

origin can be a Buffer, or any object for which Buffer_send(origin) is defined. op can be any predefined Op (custom operators are not supported).

External links

source
MPI.Get_accumulate!Function
Get_accumulate!(origin, result, target_rank::Integer, target_disp::Integer, op::Op, win::Win)

Combine the content of the origin buffer into the target buffer (specified by win and displacement target_disp) with reduction operator op on the remote rank target_rank using remote memory access. Get_accumulate also returns the content of the target buffer before accumulation into the result buffer.

origin can be a Buffer, or any object for which Buffer_send(origin) is defined, result can be a Buffer, or any object for which Buffer(result) is defined. op can be any predefined Op (custom operators are not supported).

External links

source