One-sided communication
MPI.Win_create
— FunctionMPI.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.
MPI.Win_create_dynamic
— FunctionMPI.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.
MPI.Win_allocate_shared
— Functionwin, 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.
MPI.Win_shared_query
— Functionarray = 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).
MPI.Win_flush
— FunctionWin_flush(win::Win; rank)
Completes all outstanding RMA operations initiated by the calling process to the target rank on the specified window.
External links
MPI.Win_lock
— FunctionWin_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
MPI.Win_unlock
— FunctionWin_unlock(win::Win; rank::Integer)
Completes an RMA access epoch started by a call to Win_lock
.
External links
MPI.Get!
— FunctionGet!(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
MPI.Put!
— FunctionPut!(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
MPI.Accumulate!
— FunctionAccumulate!(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
MPI.Get_accumulate!
— FunctionGet_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