Point to Point

Non-blocking send & receive point-to-point operations.

Both take:

  • an execution space where the communication happens;

  • a handle wrapping the communication space’s communicator associated to the view being exchanged;

  • a Kokkos view holding the data to send/receive;

  • the rank ID of the target of the communication.

The execution space and the handle’s communication space must match (e.g. a CUDA exec space must be associated with a NCCL comm space).

template <KokkosView View, KokkosExecutionSpace ExecSpace, CommunicationSpace CommSpace>
auto send(
  ExecSpace const& exec,
  Handle<CommSpace> const& handle,
  View view,
  RankId dest
) -> std::expected<Request, Error>;
template <KokkosView View, KokkosExecutionSpace ExecSpace, CommunicationSpace CommSpace>
auto recv(
  ExecSpace const& exec,
  Handle<CommSpace> const& handle,
  View view,
  RankId source
) -> std::expected<Request, Error>;