Design

Asynchronous MPI operations and view lifetimes

“Immediate” functions (e.g. isend) return a KokkosComm::Req, which can be wait()-ed to block until the input view can be reused. Req also manages the lifetimes of any intermediate views needed for packing the data, releasing those views when wait() is complete.

Non-contiguous Data

  • Packer::DeepCopy uses Kokkos::deep_copy to handle packing and unpacking of non-contiguous Kokkos::View. This requires an intermediate allocation, which only works for Kokkos Views, see Device Data.

Device Data

Contiguous device data is handed to MPI as-is.

For non-contiguous Kokkos::Views in a non-Kokkos::HostSpace, any temporary buffers are allocated in the same memory space as the view being operated on.