Neko 1.99.5
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
gs_utofu Module Reference

Defines a gather-scatter backend using the native Tofu interconnect (uTofu). Each rank registers its receive buffer once and a send is a single one-sided RDMA put straight into the neighbour's buffer, with the arrival signal fused into the descriptor (edata) instead of a separate atomic/credit message. Injection is non-blocking and thread-parallel: each OpenMP thread owns one injection VCQ (created thread-safe, dealt over the TNIs) and fires the puts for its share of the peers itself. The fused vector (multi-component) exchange of gs_op_r3 is supported through a second, independent context with its own buffers, receive VCQ, and parity. See gs_utofu_aux.c for the transport.

Data Types

type  gs_utofu_t
 Gather-scatter communication using one-sided uTofu puts. More...
 

Functions/Subroutines

subroutine gs_utofu_init (this, send_pe, recv_pe)
 Initialise the uTofu communication method. See gs_comm.f90 for details.
 
subroutine gs_utofu_free (this)
 Deallocate the uTofu communication method.
 
subroutine gs_nbsend_utofu (this, u, n, tag, deps, strm)
 Pack the send slabs and fire all one-sided puts (non-blocking).
 
subroutine gs_nbrecv_utofu (this, tag)
 No-op: the one-sided receive buffer is registered once at init, so there is nothing to post per round.
 
subroutine gs_nbwait_utofu (this, u, n, op, strm)
 Poll for incoming puts, reducing each slab into u as it lands, then wait for our own sends to drain and flip the double-buffer parity.
 
subroutine gs_nbsend_vec_utofu (this, u, n, nc, tag, deps, strm)
 Pack the fused nc-component send slabs and fire the puts (non-blocking).
 
subroutine gs_nbrecv_vec_utofu (this, tag, nc)
 No-op: the vector receive buffer is registered once at init, so there is nothing to post per round.
 
subroutine gs_nbwait_vec_utofu (this, u, n, nc, op, strm)
 Poll for incoming vector puts, reducing each nc-component slab into u as it lands, then flip the vector double-buffer parity. Same protocol as gs_nbwait_utofu, on the vector context and parity.
 

Variables

integer, parameter gs_utofu_xchg_tag = 8123
 MPI tag used for the one-off neighbour metadata exchange at init.
 
integer, parameter gs_utofu_xchg_tag_v = 8124
 Ditto for the fused vector path's metadata exchange.
 

Function/Subroutine Documentation

◆ gs_nbrecv_utofu()

subroutine gs_utofu::gs_nbrecv_utofu ( class(gs_utofu_t), intent(inout this,
integer, intent(in tag 
)
private

Definition at line 618 of file gs_utofu.F90.

◆ gs_nbrecv_vec_utofu()

subroutine gs_utofu::gs_nbrecv_vec_utofu ( class(gs_utofu_t), intent(inout this,
integer, intent(in tag,
integer, intent(in nc 
)
private

Definition at line 812 of file gs_utofu.F90.

◆ gs_nbsend_utofu()

subroutine gs_utofu::gs_nbsend_utofu ( class(gs_utofu_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 
)
private

Definition at line 543 of file gs_utofu.F90.

Here is the call graph for this function:

◆ gs_nbsend_vec_utofu()

subroutine gs_utofu::gs_nbsend_vec_utofu ( class(gs_utofu_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 
)
private
Parameters
ucompact shared buffer, component-outer: u((c-1)*n + idx). Peer i's slab holds nc consecutive blocks of send_len(i) values, so the scalar layout is reused scaled by nc. Same protocol as gs_nbsend_utofu, on the vector context and parity.

Definition at line 734 of file gs_utofu.F90.

Here is the call graph for this function:

◆ gs_nbwait_utofu()

subroutine gs_utofu::gs_nbwait_utofu ( class(gs_utofu_t), intent(inout this,
real(kind=rp), dimension(n), intent(inout u,
integer, intent(in n,
integer  op,
type(c_ptr), intent(inout strm 
)
private

Definition at line 625 of file gs_utofu.F90.

Here is the call graph for this function:

◆ gs_nbwait_vec_utofu()

subroutine gs_utofu::gs_nbwait_vec_utofu ( class(gs_utofu_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 
)
private

Definition at line 820 of file gs_utofu.F90.

Here is the call graph for this function:

◆ gs_utofu_free()

subroutine gs_utofu::gs_utofu_free ( class(gs_utofu_t), intent(inout this)
private

Definition at line 430 of file gs_utofu.F90.

Here is the call graph for this function:

◆ gs_utofu_init()

subroutine gs_utofu::gs_utofu_init ( class(gs_utofu_t), intent(inout this,
type(stack_i4_t), intent(inout send_pe,
type(stack_i4_t), intent(inout recv_pe 
)

Definition at line 214 of file gs_utofu.F90.

Here is the call graph for this function:

Variable Documentation

◆ gs_utofu_xchg_tag

integer, parameter gs_utofu::gs_utofu_xchg_tag = 8123
private

Definition at line 62 of file gs_utofu.F90.

◆ gs_utofu_xchg_tag_v

integer, parameter gs_utofu::gs_utofu_xchg_tag_v = 8124
private

Definition at line 64 of file gs_utofu.F90.