Handling Non-continguous Views

Handling Non-continguous Views

Handling Non-continguous Views

template<KokkosView View>
struct MpiArgs
View view
MPI_Datatype datatype
int count
template<KokkosView View>
struct DeepCopy

Use Kokkos::deep_copy to translate between non-contiguous and contiguous data.

using args_type = MpiArgs<View>
type non_const_packed_view_type
template<typename ExecSpace>
static args_type allocate_packed_for(const ExecSpace &space, const std::string &label, const View &src)
Returns:

Return an MpiArgs suitable to hold packed data for src.

Allocates a contiguous Kokkos::View large enough to hold all the data in src.

template<typename ExecSpace>
static args_type pack(const ExecSpace &space, const View &src)

Uses allocate_packed_for and Kokkos::deep_copy to return a packed view of the data in src.

template<typename ExecSpace>
static void unpack_into(const ExecSpace &space, const View &dst, const non_const_packed_view_type &src)
Parameters:
  • space – The execution space to operate in.

  • src – A Kokkos::View produced by allocate_packed_for.

  • dst – A corresponding unpacked Kokkos::View.

Uses Kokkos::deep_copy to fill dst with an unpacked view of the data in src.

template<KokkosView View>
struct MpiDatatype

Use the MPI Datatype engine to handle non-continguous data

using args_type = MpiArgs<View>
type non_const_packed_view_type
template<typename ExecSpace>
static args_type allocate_packed_for(const ExecSpace &space, const std::string &label, const View &src)
Returns:

Return an MpiArgs suitable to hold packed data for src.

Return an MpiArgs holding the src, an MPI_Datatype describing the possibly-non-contiguous data in that Kokkos::View, and a count = 1.

template<typename ExecSpace>
static args_type pack(const ExecSpace &space, const View &src)
template<typename ExecSpace>
static void unpack_into(const ExecSpace &space, const View &dst, const non_const_packed_view_type &src)