|
Neko 1.99.5
A portable framework for high-order spectral element flow simulations
|
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. | |
|
private |
Definition at line 232 of file gs_neighbour.f90.
|
private |
Definition at line 365 of file gs_neighbour.f90.
|
private |
Definition at line 191 of file gs_neighbour.f90.
|
private |
| u | compact 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.
|
private |
Definition at line 239 of file gs_neighbour.f90.
|
private |
Definition at line 374 of file gs_neighbour.f90.
|
private |
Definition at line 163 of file gs_neighbour.f90.
| 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.