All to all exchange of a single integer.
This is a wrapper around the sparse alltoall implementation and overcome the lack of non-blocking collectives on some systems.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | targets(:) | List of target ranks to send an integer to. |
||
integer, | intent(in) | :: | send_buffer(:) | Data to send to the respective target ranks. This array has to have the same ordering as targets. |
||
integer, | intent(out), | allocatable | :: | sources(:) | List of ranks we received data from (source ranks). The array will be allocated with a size according to the number of processes that send a request to this process. |
|
integer, | intent(out), | allocatable | :: | recv_buffer(:) | Received data from the sources. The array has the same size and ordering as the sources array. |
|
integer, | intent(in) | :: | comm | MPI Communicator to use for this data exchange. |
||
integer, | intent(in), | optional | :: | tag | Tag to use in the communications. Defaults to 22. |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | private | :: | nProcs | ||||
integer, | private | :: | nSources | ||||
integer, | private | :: | iProc | ||||
integer, | private | :: | iSource | ||||
integer, | private | :: | iError | ||||
integer, | private, | allocatable | :: | buf(:) |