Neko 1.99.5
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
gs_shmem::gs_shmem_t Type Referenceabstract

Gather-scatter communication using OpenSHMEM one-sided puts with per-rank signaling for completion (OpenSHMEM 1.5). More...

Inheritance diagram for gs_shmem::gs_shmem_t:
Collaboration diagram for gs_shmem::gs_shmem_t:

Public Member Functions

procedure, pass(thisinit (this, send_pe, recv_pe)
 Initialise OpenSHMEM based communication method.
 
procedure, pass(thisfree (this)
 Deallocate OpenSHMEM based communication method.
 
procedure, pass(thisnbsend (this, u, n, tag, deps, strm)
 Pack the gathered shared dofs into the symmetric send buffer and issue non-blocking puts with signaling to each neighbor's recv buffer. Before each put, wait for the receiver's ack of our previous round so we never overwrite a buffer the receiver hasn't consumed yet.
 
procedure, pass(thisnbrecv (this, tag)
 No-op: receives are completed via remote put-with-signal.
 
procedure, pass(thisnbwait (this, u, n, op, strm)
 Wait per-neighbor for the signal indicating that data has landed, apply the gather-scatter operation from the recv buffer into u, and ack the sender so they may overwrite the buffer in the next round.
 
procedure, pass(thisnbsend_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 with a single signal. Buffer indexing and put size scale by nc; the per-rank signalling is unchanged.
 
procedure, pass(thisnbrecv_vec (this, tag, nc)
 No-op: receives are completed via remote put-with-signal.
 
procedure, pass(thisnbwait_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.
 
procedure(gs_comm_init), deferred, pass init gs_comm_init
 
procedure(gs_comm_free), deferred, pass free gs_comm_free
 
procedure(gs_nbsend), deferred, pass nbsend gs_nbsend
 
procedure(gs_nbrecv), deferred, pass nbrecv gs_nbrecv
 
procedure(gs_nbwait), deferred, pass nbwait gs_nbwait
 
procedure, pass(thisinit_dofs (this)
 
procedure, pass(thisfree_dofs (this)
 
procedure, pass(thisinit_order (this, send_pe, recv_pe)
 Obtains which ranks to send and receive data from.
 
procedure, pass(thisfree_order (this)
 
procedure, pass(thisnbsend_vec (this, u, n, nc, tag, deps, strm)
 Fused vector halo exchange. Default implementations abort; backends that set vec_supported = .true. override them.
 
procedure, pass(thisnbrecv_vec (this, tag, nc)
 Default fused vector receive. Abort unless a backend overrides it.
 
procedure, pass(thisnbwait_vec (this, u, n, nc, op, strm)
 Default fused vector wait/reduce. Abort unless a backend overrides it.
 

Public Attributes

type(gs_shmem_buf_tsend_buf
 
type(gs_shmem_buf_trecv_buf
 
type(c_ptr) data_signals_ptr = C_NULL_PTR
 
type(c_ptr) ack_signals_ptr = C_NULL_PTR
 
integer(kind=i8) iter = 0
 
type(stack_i4_t), dimension(:), allocatable send_dof
 A list of stacks of dof indices local to this process to send to rank_i.
 
type(stack_i4_t), dimension(:), allocatable recv_dof
 recv_dof(rank_i) is a stack of dof indices local to this process to receive from rank_i. size(recv_dof) == pe_size
 
integer, dimension(:), allocatable send_pe
 Array of ranks that this process should send to.
 
integer, dimension(:), allocatable recv_pe
 array of ranks that this process will receive messages from
 
logical vec_supported = .false.
 Whether this backend implements the fused vector (multi-component) halo exchange (nbsend_vec/nbrecv_vec/nbwait_vec). When .false., the gs_op_r3 caller falls back to nc independent scalar exchanges.
 

Detailed Description

Each PE allocates symmetric send and recv buffers sized to the global maximum number of dofs (so puts can target a well-defined offset on the remote PE's recv buffer) plus two symmetric uint64 arrays of size pe_size, indexed by the remote PE's rank: data_signals[r] holds an "iter" value written by PE r when it has put data into our recv buffer (via shmem_putmem_signal_nbi); ack_signals[r] holds an "iter" value written by PE r after it has consumed our most recent put (via shmem_uint64_atomic_set). The sender waits on its own ack_signals[dst] before each put so a fast sender cannot overwrite a buffer the receiver hasn't consumed.

Per-rank slot indexing avoids the slot-exchange handshake that a neighbor-list-position scheme would require, which is fragile because send_pe and recv_pe are pushed independently in gs_schedule and may differ in size and ordering.

Definition at line 91 of file gs_shmem.F90.

Member Function/Subroutine Documentation

◆ free() [1/2]

procedure, pass(this) gs_shmem::gs_shmem_t::free ( class(gs_shmem_t), intent(inout this)

Definition at line 109 of file gs_shmem.F90.

◆ free() [2/2]

procedure(gs_comm_free), deferred, pass gs_comm::gs_comm_t::free
pure virtualinherited

Definition at line 70 of file gs_comm.f90.

◆ free_dofs()

procedure, pass(this) gs_comm::gs_comm_t::free_dofs ( class(gs_comm_t), intent(inout this)
inherited

Definition at line 75 of file gs_comm.f90.

◆ free_order()

procedure, pass(this) gs_comm::gs_comm_t::free_order ( class(gs_comm_t), intent(inout this)
inherited

Definition at line 77 of file gs_comm.f90.

◆ init() [1/2]

procedure, pass(this) gs_shmem::gs_shmem_t::init ( class(gs_shmem_t), intent(inout this,
type(stack_i4_t), intent(inout send_pe,
type(stack_i4_t), intent(inout recv_pe 
)

Definition at line 108 of file gs_shmem.F90.

◆ init() [2/2]

procedure(gs_comm_init), deferred, pass gs_comm::gs_comm_t::init
pure virtualinherited

Definition at line 69 of file gs_comm.f90.

◆ init_dofs()

procedure, pass(this) gs_comm::gs_comm_t::init_dofs ( class(gs_comm_t), intent(inout this)
inherited

Definition at line 74 of file gs_comm.f90.

◆ init_order()

procedure, pass(this) gs_comm::gs_comm_t::init_order ( class(gs_comm_t), intent(inout this,
type(stack_i4_t), intent(inout send_pe,
type(stack_i4_t), intent(inout recv_pe 
)
inherited
Parameters
send_pe,onlycontains rank ids this porcesss should send to
recv_pe,onlythe ranks this process should receive from

Definition at line 76 of file gs_comm.f90.

◆ nbrecv() [1/2]

procedure, pass(this) gs_shmem::gs_shmem_t::nbrecv ( class(gs_shmem_t), intent(inout this,
integer, intent(in tag 
)

Definition at line 111 of file gs_shmem.F90.

◆ nbrecv() [2/2]

procedure(gs_nbrecv), deferred, pass gs_comm::gs_comm_t::nbrecv
pure virtualinherited

Definition at line 72 of file gs_comm.f90.

◆ nbrecv_vec() [1/2]

procedure, pass(this) gs_comm::gs_comm_t::nbrecv_vec ( class(gs_comm_t), intent(inout this,
integer, intent(in tag,
integer, intent(in nc 
)
inherited

Definition at line 81 of file gs_comm.f90.

◆ nbrecv_vec() [2/2]

procedure, pass(this) gs_shmem::gs_shmem_t::nbrecv_vec ( class(gs_shmem_t), intent(inout this,
integer, intent(in tag,
integer, intent(in nc 
)

Definition at line 114 of file gs_shmem.F90.

◆ nbsend() [1/2]

procedure, pass(this) gs_shmem::gs_shmem_t::nbsend ( class(gs_shmem_t), intent(inout this,
real(kind=rp), dimension(n), intent(inout u,
integer, intent(in n,
integer, intent(in tag,
type(c_ptr), intent(inout deps,
type(c_ptr), intent(inout strm 
)

Definition at line 110 of file gs_shmem.F90.

◆ nbsend() [2/2]

procedure(gs_nbsend), deferred, pass gs_comm::gs_comm_t::nbsend
pure virtualinherited

Definition at line 71 of file gs_comm.f90.

◆ nbsend_vec() [1/2]

procedure, pass(this) gs_comm::gs_comm_t::nbsend_vec ( class(gs_comm_t), intent(inout this,
real(kind=rp), dimension(nc*n), intent(inout u,
integer, intent(in n,
integer, intent(in nc,
integer, intent(in tag,
type(c_ptr), intent(inout deps,
type(c_ptr), intent(inout strm 
)
inherited
Parameters
ucompact shared buffer, component-outer: u((c-1)*n + idx)
nnumber of shared dofs (per component)
ncnumber of components

Definition at line 80 of file gs_comm.f90.

◆ nbsend_vec() [2/2]

procedure, pass(this) gs_shmem::gs_shmem_t::nbsend_vec ( class(gs_shmem_t), intent(inout this,
real(kind=rp), dimension(nc*n), intent(inout u,
integer, intent(in n,
integer, intent(in nc,
integer, intent(in tag,
type(c_ptr), intent(inout deps,
type(c_ptr), intent(inout strm 
)
Parameters
ucompact shared buffer, component-outer: u((c-1)*n + idx).

Definition at line 113 of file gs_shmem.F90.

◆ nbwait() [1/2]

procedure, pass(this) gs_shmem::gs_shmem_t::nbwait ( class(gs_shmem_t), intent(inout this,
real(kind=rp), dimension(n), intent(inout u,
integer, intent(in n,
integer  op,
type(c_ptr), intent(inout strm 
)

Definition at line 112 of file gs_shmem.F90.

◆ nbwait() [2/2]

procedure(gs_nbwait), deferred, pass gs_comm::gs_comm_t::nbwait
pure virtualinherited

Definition at line 73 of file gs_comm.f90.

◆ nbwait_vec() [1/2]

procedure, pass(this) gs_comm::gs_comm_t::nbwait_vec ( class(gs_comm_t), intent(inout this,
real(kind=rp), dimension(nc*n), intent(inout u,
integer, intent(in n,
integer, intent(in nc,
integer  op,
type(c_ptr), intent(inout strm 
)
inherited

Definition at line 82 of file gs_comm.f90.

◆ nbwait_vec() [2/2]

procedure, pass(this) gs_shmem::gs_shmem_t::nbwait_vec ( class(gs_shmem_t), intent(inout this,
real(kind=rp), dimension(nc*n), intent(inout u,
integer, intent(in n,
integer, intent(in nc,
integer  op,
type(c_ptr), intent(inout strm 
)

Definition at line 115 of file gs_shmem.F90.

Member Data Documentation

◆ ack_signals_ptr

type(c_ptr) gs_shmem::gs_shmem_t::ack_signals_ptr = C_NULL_PTR

Definition at line 101 of file gs_shmem.F90.

◆ data_signals_ptr

type(c_ptr) gs_shmem::gs_shmem_t::data_signals_ptr = C_NULL_PTR

Definition at line 97 of file gs_shmem.F90.

◆ iter

integer(kind=i8) gs_shmem::gs_shmem_t::iter = 0

Definition at line 106 of file gs_shmem.F90.

◆ recv_buf

type(gs_shmem_buf_t) gs_shmem::gs_shmem_t::recv_buf

Definition at line 93 of file gs_shmem.F90.

◆ recv_dof

type(stack_i4_t), dimension(:), allocatable gs_comm::gs_comm_t::recv_dof
inherited

Definition at line 57 of file gs_comm.f90.

◆ recv_pe

integer, dimension(:), allocatable gs_comm::gs_comm_t::recv_pe
inherited

Definition at line 63 of file gs_comm.f90.

◆ send_buf

type(gs_shmem_buf_t) gs_shmem::gs_shmem_t::send_buf

Definition at line 92 of file gs_shmem.F90.

◆ send_dof

type(stack_i4_t), dimension(:), allocatable gs_comm::gs_comm_t::send_dof
inherited

Definition at line 54 of file gs_comm.f90.

◆ send_pe

integer, dimension(:), allocatable gs_comm::gs_comm_t::send_pe
inherited
Note
: this will usually be fewer than the total number of ranks size(send_pe) <= pe_size

Definition at line 61 of file gs_comm.f90.

◆ vec_supported

logical gs_comm::gs_comm_t::vec_supported = .false.
inherited

Definition at line 67 of file gs_comm.f90.


The documentation for this type was generated from the following file: