One north-row tile’s routing for the distributed fold. Entries of
family f for peer p live at start(p,f)+1 .. start(p,f)+n(p,f)
of the flat entry arrays (send and receive separately).
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | ng | = | 0 |
Ghost width. |
|
| integer, | public | :: | ni | = | 0 |
Global physical width of the fold row. |
|
| integer, | public | :: | nmax | = | 0 |
Largest entry count of any (peer, family) list, send or receive. |
|
| integer, | public | :: | npeer | = | 0 |
Peer tiles this tile sends to or receives from (self included when its own mirror falls in its window). |
|
| integer, | public | :: | nrecv(FOLD_NFAM) | = | 0 |
Total receive entries per family. |
|
| integer, | public | :: | nsend(FOLD_NFAM) | = | 0 |
Total send entries per family. |
|
| integer, | public, | allocatable | :: | peer_rx(:) |
Peer tile x-coordinates, ascending, shape (npeer). |
||
| integer, | public | :: | px | = | 0 |
Tiles along the fold row. |
|
| integer, | public, | allocatable | :: | recv_cls(:) |
Fold-row class of each receive entry ( |
||
| integer, | public, | allocatable | :: | recv_col(:) |
Local storage column this tile writes, flat (all families). |
||
| integer, | public, | allocatable | :: | recv_e(:) |
1-based position within its (peer, family) list, flat. |
||
| integer, | public, | allocatable | :: | recv_n(:,:) |
Receive entry counts, shape (npeer, FOLD_NFAM). |
||
| integer, | public, | allocatable | :: | recv_peer(:) |
Peer index of each receive entry, flat. |
||
| integer, | public, | allocatable | :: | recv_start(:,:) |
Offsets into the flat receive arrays, shape (npeer, FOLD_NFAM). |
||
| integer, | public | :: | rx | = | -1 |
This tile’s x-coordinate (0-based). |
|
| integer, | public | :: | self_peer | = | 0 |
Index into |
|
| integer, | public, | allocatable | :: | send_col(:) |
Local storage column this tile reads, flat (all families). |
||
| integer, | public, | allocatable | :: | send_e(:) |
1-based position of each send entry within its (peer, family) list, flat. |
||
| integer, | public, | allocatable | :: | send_n(:,:) |
Send entry counts, shape (npeer, FOLD_NFAM). |
||
| integer, | public, | allocatable | :: | send_peer(:) |
Peer index of each send entry, flat. |
||
| integer, | public, | allocatable | :: | send_start(:,:) |
Offsets into the flat send arrays, shape (npeer, FOLD_NFAM). |
Free the plan’s lists and reset it to the empty default. Safe on a plan that was never built.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(fold_plan_t), | intent(inout) | :: | this |
type :: fold_plan_t !! One north-row tile's routing for the distributed fold. Entries of !! family `f` for peer `p` live at `start(p,f)+1 .. start(p,f)+n(p,f)` !! of the flat entry arrays (send and receive separately). integer :: ni = 0 !! Global physical width of the fold row. integer :: px = 0 !! Tiles along the fold row. integer :: ng = 0 !! Ghost width. integer :: rx = -1 !! This tile's x-coordinate (0-based). integer :: npeer = 0 !! Peer tiles this tile sends to or receives from (self included !! when its own mirror falls in its window). integer :: self_peer = 0 !! Index into `peer_rx` of this tile itself (0 if not a peer). integer :: nmax = 0 !! Largest entry count of any (peer, family) list, send or receive. integer, allocatable :: peer_rx(:) !! Peer tile x-coordinates, ascending, shape (npeer). integer, allocatable :: send_n(:, :) !! Send entry counts, shape (npeer, FOLD_NFAM). integer, allocatable :: send_start(:, :) !! Offsets into the flat send arrays, shape (npeer, FOLD_NFAM). integer, allocatable :: recv_n(:, :) !! Receive entry counts, shape (npeer, FOLD_NFAM). integer, allocatable :: recv_start(:, :) !! Offsets into the flat receive arrays, shape (npeer, FOLD_NFAM). integer :: nsend(FOLD_NFAM) = 0 !! Total send entries per family. integer :: nrecv(FOLD_NFAM) = 0 !! Total receive entries per family. integer, allocatable :: send_col(:) !! Local storage column this tile reads, flat (all families). integer, allocatable :: send_peer(:) !! Peer index of each send entry, flat. integer, allocatable :: send_e(:) !! 1-based position of each send entry within its (peer, family) !! list, flat. integer, allocatable :: recv_col(:) !! Local storage column this tile writes, flat (all families). integer, allocatable :: recv_peer(:) !! Peer index of each receive entry, flat. integer, allocatable :: recv_e(:) !! 1-based position within its (peer, family) list, flat. integer, allocatable :: recv_cls(:) !! Fold-row class of each receive entry (`FOLD_ROW_*`), flat. contains procedure :: destroy => fold_plan_destroy end type fold_plan_t