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...
|
| procedure, pass(this) | init (this, send_pe, recv_pe) |
| | Initialise Coarray Fortran based communication method.
|
| |
| procedure, pass(this) | free (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(this) | nbsend (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(this) | nbrecv (this) |
| | No-op for coarrays: senders push into the receiver's buffer, so the receive side does not need to post anything.
|
| |
| procedure, pass(this) | nbwait (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(this) | init_dofs (this) |
| |
| procedure, pass(this) | free_dofs (this) |
| |
| procedure, pass(this) | init_order (this, send_pe, recv_pe) |
| | Obtains which ranks to send and receive data from.
|
| |
| procedure, pass(this) | free_order (this) |
| |
|
| 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
|
| |
Definition at line 129 of file gs_caf.F90.