27 constexpr size_t size =
sizeof(T);
28 char* dst_ptr = (
char*)(buffer_m.data()) + writepos_m;
29 char* src_ptr = (
char*)(view.data());
30 assert(writepos_m + (nsends * size) <= buffer_m.size());
33 Kokkos::View<
char*,
typename Kokkos::View<T*, ViewArgs...>::memory_space,
34 Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
36 Kokkos::View<
char*,
typename buffer_type::memory_space,
37 Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
38 src_view_type src_view(src_ptr, size * nsends);
39 dst_view_type dst_view(dst_ptr, size * nsends);
40 Kokkos::deep_copy(dst_view, src_view);
42 writepos_m += (nsends * size);
50 const Kokkos::View<
Vector<T, Dim>*, ViewArgs...>& view, size_type nsends) {
51 constexpr size_t size =
sizeof(T);
52 char* dst_ptr = (
char*)(buffer_m.data());
57 using exec_space =
typename Kokkos::View<T*, ViewArgs...>::execution_space;
59 Kokkos::MDRangePolicy<Kokkos::Rank<2>, Kokkos::IndexType<size_type>, exec_space>;
61 "Archive::serialize()", mdrange_t({0, 0}, {(
long int)nsends, Dim}),
62 KOKKOS_LAMBDA(
const size_type i,
const size_t d) {
63 const char* src =
reinterpret_cast<const char*
>(&src_ptr[i][d]);
64 char* dst = dst_ptr + (Dim * i + d) * size + wp;
65 copyBytes(dst, src, size);
69 writepos_m += Dim * size * nsends;
79 if (nrecvs > view.extent(0)) {
80 Kokkos::realloc(view, nrecvs);
83 constexpr size_t size =
sizeof(T);
84 char* src_ptr = (
char*)(buffer_m.data()) + readpos_m;
85 char* dst_ptr = (
char*)(view.data());
86 assert(readpos_m + (nrecvs * size) <= buffer_m.size());
89 Kokkos::View<
char*,
typename buffer_type::memory_space,
90 Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
92 Kokkos::View<
char*,
typename Kokkos::View<T*, ViewArgs...>::memory_space,
93 Kokkos::MemoryTraits<Kokkos::Unmanaged>>;
94 src_view_type src_view(src_ptr, size * nrecvs);
95 dst_view_type dst_view(dst_ptr, size * nrecvs);
96 Kokkos::deep_copy(dst_view, src_view);
98 readpos_m += (nrecvs * size);
109 if (nrecvs > view.extent(0)) {
110 Kokkos::realloc(view, nrecvs);
113 constexpr size_t size =
sizeof(T);
114 char* src_ptr = (
char*)(buffer_m.data());
117 using exec_space =
typename Kokkos::View<T*, ViewArgs...>::execution_space;
119 Kokkos::MDRangePolicy<Kokkos::Rank<2>, Kokkos::IndexType<size_type>, exec_space>;
120 Kokkos::parallel_for(
121 "Archive::deserialize()", mdrange_t({0, 0}, {(
long int)nrecvs, Dim}),
122 KOKKOS_LAMBDA(
const size_type i,
const size_t d) {
123 const char* src = src_ptr + (Dim * i + d) * size + rp;
124 char* dst =
reinterpret_cast<char*
>(&dst_ptr[i][d]);
125 copyBytes(dst, src, size);
128 readpos_m += Dim * size * nrecvs;