Neko 1.99.3
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
gs_caf::gs_caf_t Type Referenceabstract

Gather-scatter communication using Coarray Fortran (F2008). Each image puts directly into the (module-level) receive coarray on the destination image. The signaling mode (NEKO_GS_CAF_SIGNALING) selects how segment ordering is established: sync uses sync images over the union of send and recv peers, atomic uses per-peer atomic_define/atomic_ref on data_ready/buf_ready counters, and event uses coarray events. More...

Inheritance diagram for gs_caf::gs_caf_t:
Collaboration diagram for gs_caf::gs_caf_t:

Public Member Functions

procedure, pass(thisinit (this, send_pe, recv_pe)
 Initialise Coarray Fortran based communication method.
 
procedure, pass(thisfree (this)
 Deallocate Coarray Fortran based communication method. The shared module-level recv coarray is intentionally retained so it can be reused by subsequent gs_caf_t instances.
 
procedure, pass(thisnbsend (this, u, n, deps, strm)
 Pack u into per-peer slabs and put each slab into the remote image's recv_buf. Double buffering means each round writes to a different half of the recv coarray, so no back-pressure synchronisation is needed in sync mode – the visibility synchronisation in nbwait suffices. Atomic and event modes still use their per-pair signalling.
 
procedure, pass(thisnbrecv (this)
 No-op for coarrays: senders push into the receiver's buffer, so the receive side does not need to post anything.
 
procedure, pass(thisnbwait (this, u, n, op, strm)
 Wait for all incoming puts and reduce them into u. In sync mode a sync_images bracket pairs with the senders' nbsend; in atomic mode each sender is awaited via its data_ready counter and credited via buf_ready after unpack.
 
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)
 

Public Attributes

real(kind=rp), dimension(:), allocatable send_buf
 Local gathered send buffer (concatenated slabs, one per send peer).
 
integer, dimension(:), allocatable send_len
 Number of dofs to send to / receive from each peer.
 
integer, dimension(:), allocatable recv_len
 
integer, dimension(:), allocatable send_offset
 0-based offset into send_buf / recv_buf for each peer.
 
integer, dimension(:), allocatable recv_offset
 
integer, dimension(:), allocatable dest_offset
 0-based offset in the remote peer's recv_buf where our slab is placed.
 
integer, dimension(:), allocatable send_img
 1-based image numbers for the send and recv peer arrays.
 
integer, dimension(:), allocatable recv_img
 
integer, dimension(:), allocatable sync_img
 sync-mode only: image numbers of the union of send and recv peers, used for the pairwise sync images that bracket the put. Unallocated in atomic and event modes.
 
logical send_started = .false.
 event-mode only: false on the very first nbsend so the buf_ready wait is skipped (there are no credits posted yet).
 
integer parity = 0
 Double-buffer parity (0 or 1), flipped after every nbwait. The current round writes to and reads from the parity*buf_size half of gs_caf_recv_buf, the next round uses the other half.
 
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
 

Detailed Description

Definition at line 129 of file gs_caf.F90.

Member Function/Subroutine Documentation

◆ free() [1/2]

procedure, pass(this) gs_caf::gs_caf_t::free ( class(gs_caf_t), intent(inout this)

Definition at line 153 of file gs_caf.F90.

◆ free() [2/2]

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

Definition at line 61 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 66 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 68 of file gs_comm.f90.

◆ init() [1/2]

procedure, pass(this) gs_caf::gs_caf_t::init ( class(gs_caf_t), intent(inout this,
type(stack_i4_t), intent(inout send_pe,
type(stack_i4_t), intent(inout recv_pe 
)

Definition at line 152 of file gs_caf.F90.

◆ init() [2/2]

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

Definition at line 60 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 65 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 67 of file gs_comm.f90.

◆ nbrecv() [1/2]

procedure, pass(this) gs_caf::gs_caf_t::nbrecv ( class(gs_caf_t), intent(inout this)

Definition at line 155 of file gs_caf.F90.

◆ nbrecv() [2/2]

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

Definition at line 63 of file gs_comm.f90.

◆ nbsend() [1/2]

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

Definition at line 154 of file gs_caf.F90.

◆ nbsend() [2/2]

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

Definition at line 62 of file gs_comm.f90.

◆ nbwait() [1/2]

procedure, pass(this) gs_caf::gs_caf_t::nbwait ( class(gs_caf_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 156 of file gs_caf.F90.

◆ nbwait() [2/2]

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

Definition at line 64 of file gs_comm.f90.

Member Data Documentation

◆ dest_offset

integer, dimension(:), allocatable gs_caf::gs_caf_t::dest_offset

Definition at line 137 of file gs_caf.F90.

◆ parity

integer gs_caf::gs_caf_t::parity = 0

Definition at line 150 of file gs_caf.F90.

◆ recv_dof

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

Definition at line 52 of file gs_comm.f90.

◆ recv_img

integer, dimension(:), allocatable gs_caf::gs_caf_t::recv_img

Definition at line 139 of file gs_caf.F90.

◆ recv_len

integer, dimension(:), allocatable gs_caf::gs_caf_t::recv_len

Definition at line 133 of file gs_caf.F90.

◆ recv_offset

integer, dimension(:), allocatable gs_caf::gs_caf_t::recv_offset

Definition at line 135 of file gs_caf.F90.

◆ recv_pe

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

Definition at line 58 of file gs_comm.f90.

◆ send_buf

real(kind=rp), dimension(:), allocatable gs_caf::gs_caf_t::send_buf

Definition at line 131 of file gs_caf.F90.

◆ send_dof

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

Definition at line 49 of file gs_comm.f90.

◆ send_img

integer, dimension(:), allocatable gs_caf::gs_caf_t::send_img

Definition at line 139 of file gs_caf.F90.

◆ send_len

integer, dimension(:), allocatable gs_caf::gs_caf_t::send_len

Definition at line 133 of file gs_caf.F90.

◆ send_offset

integer, dimension(:), allocatable gs_caf::gs_caf_t::send_offset

Definition at line 135 of file gs_caf.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 56 of file gs_comm.f90.

◆ send_started

logical gs_caf::gs_caf_t::send_started = .false.

Definition at line 146 of file gs_caf.F90.

◆ sync_img

integer, dimension(:), allocatable gs_caf::gs_caf_t::sync_img

Definition at line 143 of file gs_caf.F90.


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