Go to the source code of this file.
|
| module | crystal_router |
| | Crystal router: scalable all-to-some personalized exchange.
|
| |
|
| subroutine, public | crystal_router::crystal_router_pack (out, dest, body) |
| | Append one record to a packed crystal-router buffer.
|
| |
| subroutine, public | crystal_router::crystal_router_transfer (buf, n) |
| | Route packed records to their destination ranks.
|
| |
| subroutine | crystal_router::cr_check_dest (buf, n) |
| | Abort if any record destination falls outside \( [0, P) \).
|
| |
| subroutine | crystal_router::cr_partition (buf, n, mid, lower, keep, nkeep, snd, nsnd) |
| | Partition buf into records kept locally and records to be sent. A record is kept when the side of its destination (relative to mid) matches lower, i.e. it already belongs to our half.
|
| |
| subroutine | crystal_router::cr_exchange (sbuf, sn, dst, rbuf, rn, src) |
| | Size-negotiated bidirectional exchange with a partner. Either dst or src may be MPI_PROC_NULL to make that direction a no-op.
|
| |
| subroutine | crystal_router::cr_concat (buf, n, a, na, b, nb) |
| | Rebuild buf as the concatenation a(1:na) ++ b(1:nb).
|
| |
| subroutine | crystal_router::cr_append (buf, n, e, ne) |
| | Append e(1:ne) to buf(1:n) in place.
|
| |