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

Defines gather-scatter communication using MPI neighbourhood collectives.

Data Types

type  gs_neighbour_t
 Gather-scatter communication using an MPI neighbourhood collective. The whole halo exchange is carried out by a single MPI_Ineighbor_alltoallv over a distributed-graph communicator built once from the send/recv peer lists. Compared to the point-to-point gs_mpi_t this trades N Isend/Irecv pairs for one collective call: a single entry into the (serialised, on Fugaku) MPI runtime, leaving the library free to stripe the transfers across all network interfaces internally. More...
 

Functions/Subroutines

subroutine gs_neighbour_init (this, send_pe, recv_pe)
 Initialise the neighbourhood-collective communication method See gs_comm.f90 for details.
 
subroutine gs_neighbour_free (this)
 Deallocate the neighbourhood-collective communication method.
 
subroutine gs_nbsend_neighbour (this, u, n, tag, deps, strm)
 Pack the send buffer and initiate the neighbourhood collective. The collective covers both directions, so all of the communication is launched here; gs_nbrecv_neighbour is a no-op.
 
subroutine gs_nbrecv_neighbour (this, tag)
 No-op: the neighbourhood collective issued in nbsend handles both the send and receive directions, so there is nothing to pre-post here.
 
subroutine gs_nbwait_neighbour (this, u, n, op, strm)
 Wait for the neighbourhood collective and reduce the received slabs.
 
subroutine gs_nbsend_vec_neighbour (this, u, n, nc, tag, deps, strm)
 Pack the nc components and launch a single neighbourhood collective.
 
subroutine gs_nbrecv_vec_neighbour (this, tag, nc)
 No-op: the collective is launched in nbsend_vec.
 
subroutine gs_nbwait_vec_neighbour (this, u, n, nc, op, strm)
 Wait for the vector collective and reduce each received slab into u. Peer i's received slab holds nc consecutive blocks of recvcounts(i) values, matching the sender's packing convention.
 

Function/Subroutine Documentation

◆ gs_nbrecv_neighbour()

subroutine gs_neighbour::gs_nbrecv_neighbour ( class(gs_neighbour_t), intent(inout this,
integer, intent(in tag 
)
private

Definition at line 232 of file gs_neighbour.f90.

◆ gs_nbrecv_vec_neighbour()

subroutine gs_neighbour::gs_nbrecv_vec_neighbour ( class(gs_neighbour_t), intent(inout this,
integer, intent(in tag,
integer, intent(in nc 
)
private

Definition at line 365 of file gs_neighbour.f90.

◆ gs_nbsend_neighbour()

subroutine gs_neighbour::gs_nbsend_neighbour ( class(gs_neighbour_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 191 of file gs_neighbour.f90.

◆ gs_nbsend_vec_neighbour()

subroutine gs_neighbour::gs_nbsend_vec_neighbour ( class(gs_neighbour_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 in send_buf_v holds nc consecutive blocks of sendcounts(i) values, so the collective descriptors are simply nc times the scalar ones.

Definition at line 318 of file gs_neighbour.f90.

◆ gs_nbwait_neighbour()

subroutine gs_neighbour::gs_nbwait_neighbour ( class(gs_neighbour_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 239 of file gs_neighbour.f90.

◆ gs_nbwait_vec_neighbour()

subroutine gs_neighbour::gs_nbwait_vec_neighbour ( class(gs_neighbour_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 374 of file gs_neighbour.f90.

◆ gs_neighbour_free()

subroutine gs_neighbour::gs_neighbour_free ( class(gs_neighbour_t), intent(inout this)
private

Definition at line 163 of file gs_neighbour.f90.

◆ gs_neighbour_init()

subroutine gs_neighbour::gs_neighbour_init ( class(gs_neighbour_t), intent(inout this,
type(stack_i4_t), intent(inout send_pe,
type(stack_i4_t), intent(inout recv_pe 
)

Unit weights for the graph. MPI_UNWEIGHTED is the natural choice but trips frt's mpi_f08 generic resolution; with reorder = .false. the weights never affect the neighbour ordering, so all-ones is equivalent.

Definition at line 94 of file gs_neighbour.f90.