12 template <
class... Properties>
16 , buffer_m(
"buffer", size) {}
18 template <
class... Properties>
19 template <
typename T,
class... ViewArgs>
22 using exec_space =
typename Kokkos::View<
T*, ViewArgs...>::execution_space;
23 using policy_type = Kokkos::RangePolicy<exec_space>;
25 size_t size =
sizeof(
T);
27 "Archive::serialize()", policy_type(0, nsends),
29 std::memcpy(buffer_m.data() + i * size + writepos_m, view.data() + i, size);
32 writepos_m += size * nsends;
35 template <
class... Properties>
36 template <
typename T,
unsigned Dim,
class... ViewArgs>
39 using exec_space =
typename Kokkos::View<
T*, ViewArgs...>::execution_space;
41 size_t size =
sizeof(
T);
45 Kokkos::MDRangePolicy<Kokkos::Rank<2>, Kokkos::IndexType<size_type>, exec_space>;
47 "Archive::serialize()",
52 mdrange_t({0, 0}, {(
long int)nsends,
Dim}),
53 KOKKOS_CLASS_LAMBDA(
const size_type i,
const size_t d) {
54 std::memcpy(buffer_m.data() + (
Dim * i + d) * size + writepos_m,
55 &(*(view.data() + i))[d], size);
58 writepos_m +=
Dim * size * nsends;
61 template <
class... Properties>
62 template <
typename T,
class... ViewArgs>
65 using exec_space =
typename Kokkos::View<
T*, ViewArgs...>::execution_space;
66 using policy_type = Kokkos::RangePolicy<exec_space>;
68 size_t size =
sizeof(
T);
69 if (nrecvs > view.extent(0)) {
70 Kokkos::realloc(view, nrecvs);
73 "Archive::deserialize()", policy_type(0, nrecvs),
75 std::memcpy(view.data() + i, buffer_m.data() + i * size + readpos_m, size);
80 readpos_m += size * nrecvs;
83 template <
class... Properties>
84 template <
typename T,
unsigned Dim,
class... ViewArgs>
87 using exec_space =
typename Kokkos::View<
T*, ViewArgs...>::execution_space;
89 size_t size =
sizeof(
T);
90 if (nrecvs > view.extent(0)) {
91 Kokkos::realloc(view, nrecvs);
94 Kokkos::MDRangePolicy<Kokkos::Rank<2>, Kokkos::IndexType<size_type>, exec_space>;
96 "Archive::deserialize()", mdrange_t({0, 0}, {(
long int)nrecvs,
Dim}),
97 KOKKOS_CLASS_LAMBDA(
const size_type i,
const size_t d) {
98 std::memcpy(&(*(view.data() + i))[d],
99 buffer_m.data() + (
Dim * i + d) * size + readpos_m, size);
102 readpos_m +=
Dim * size * nrecvs;
Implementations for FFT constructor/destructor and transforms.
void parallel_for(const std::string &name, const ExecPolicy &policy, const FunctorType &functor)
void serialize(const Kokkos::View< T *, ViewArgs... > &view, size_type nsends)
void deserialize(Kokkos::View< T *, ViewArgs... > &view, size_type nrecvs)
Archive(size_type size=0)