Defines MPI one-sided (RMA) gather-scatter communication.
|
| subroutine | gs_mpi_rma_init (this, send_pe, recv_pe) |
| | Initialise MPI RMA based communication method.
|
| |
| subroutine | gs_mpi_rma_free (this) |
| | Deallocate MPI RMA based communication method.
|
| |
| integer(kind=i8) function | gs_mpi_rma_load (s, slot) |
| | Reload a signal counter through a VOLATILE dummy, so the spin in gs_mpi_rma_wait_ge reads memory on every iteration rather than a value the compiler hoisted out of the loop.
|
| |
| subroutine | gs_mpi_rma_wait_ge (this, slot, val) |
| | Spin until the local signal counter in slot slot has reached val. Called by the master thread only.
|
| |
| subroutine | gs_mpi_rma_nbsend (this, u, n, tag, deps, strm) |
| | Pack the gathered shared dofs and put them into each neighbour's receive window, then announce the puts. See the type comment for why the puts, the flush and the signals are separate phases.
|
| |
| subroutine | gs_mpi_rma_nbrecv (this, tag) |
| | No-op: receives are completed by the remote put and its signal.
|
| |
| subroutine | gs_mpi_rma_nbwait (this, u, n, op, strm) |
| | Wait per neighbour for the signal that its data has landed, reduce the slab into u, and ack the sender so it may overwrite the slab next round.
|
| |
| subroutine | gs_mpi_rma_nbsend_vec (this, u, n, nc, tag, deps, strm) |
| | Fused nc-component send: pack nc contiguous component blocks per peer slab and put nc*ndofs reals. Buffer indexing and put sizes scale by nc; the signalling is unchanged.
|
| |
| subroutine | gs_mpi_rma_nbrecv_vec (this, tag, nc) |
| | No-op: receives are completed by the remote put and its signal.
|
| |
| subroutine | gs_mpi_rma_nbwait_vec (this, u, n, nc, op, strm) |
| | Fused nc-component wait/reduce: per peer, wait on the data signal and reduce nc component blocks into u, then ack the sender.
|
| |
|
| logical, parameter, public | gs_mpi_rma_avail = .true. |
| | MPI RMA needs nothing beyond MPI-3, so the backend is always built. Kept as a parameter for symmetry with the other one-sided backends, which the gs comm. autotuner queries before benchmarking them.
|
| |
| integer, parameter | gs_mpi_rma_poke = 64 |
| | Number of spin iterations between the progress pokes in gs_mpi_rma_wait_ge.
|
| |
| logical, save | gs_mpi_rma_flush_all = .true. |
| | Whether to complete the payload puts with a single MPI_Win_flush_all rather than one MPI_Win_flush per peer. Batched is the default, set NEKO_GS_RMA_FLUSH_ALL=0 for the per-peer form.
|
| |
| logical, save | gs_mpi_rma_flush_bound = .false. |
| | Whether the flush strategy has been read from the environment. It is a program-wide binding, read once on the first init.
|
| |