1 #ifndef TRANSPOSE_PARTICLES_HPP
2 #define TRANSPOSE_PARTICLES_HPP
6 template<
class DataType>
9 if (VEC_LEN == 1)
return;
11 const std::size_t PTL_N_DBL =
sizeof( Cabana::Tuple<DataType>)/8;
17 int team_size = VEC_LEN;
21 int league_size = n_vec;
23 typedef Kokkos::View<double[VEC_LEN*PTL_N_DBL],ExSpace::scratch_memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged>> PtlVec;
24 size_t shmem_size = PtlVec::shmem_size();
26 Kokkos::TeamPolicy<ExSpace> (league_size, team_size).set_scratch_size(
KOKKOS_TEAM_SCRATCH_OPT,Kokkos::PerTeam(shmem_size)),
27 KOKKOS_LAMBDA (Kokkos::TeamPolicy<ExSpace>::member_type team_member){
31 int ivec = team_member.league_rank();
32 int ith = team_member.team_rank();
35 for(
int idbl = ith; idbl<VEC_LEN*PTL_N_DBL; idbl+=team_size){
36 shmem_ptl_vec(idbl) = vptl[ivec].
data[idbl];
40 for(
int iptl = ith; iptl<VEC_LEN; iptl+=team_size){
41 for(
int iprop = 0; iprop<PTL_N_DBL; iprop++){
42 vptl[ivec].
data[iprop*VEC_LEN + iptl] = shmem_ptl_vec(iptl*PTL_N_DBL + iprop);
50 template<
class DataType>
53 if (VEC_LEN == 1)
return;
55 const std::size_t PTL_N_DBL =
sizeof( Cabana::Tuple<DataType>)/8;
61 int team_size = VEC_LEN;
65 int league_size = n_vec;
67 typedef Kokkos::View<double[VEC_LEN*PTL_N_DBL],ExSpace::scratch_memory_space, Kokkos::MemoryTraits<Kokkos::Unmanaged>> PtlVec;
68 size_t shmem_size = PtlVec::shmem_size();
70 Kokkos::TeamPolicy<ExSpace> (league_size, team_size).set_scratch_size(
KOKKOS_TEAM_SCRATCH_OPT,Kokkos::PerTeam(shmem_size)),
71 KOKKOS_LAMBDA (Kokkos::TeamPolicy<ExSpace>::member_type team_member){
75 int ivec = team_member.league_rank();
76 int ith = team_member.team_rank();
79 for(
int iptl = ith; iptl<VEC_LEN; iptl+=team_size){
80 for(
int iprop = 0; iprop<PTL_N_DBL; iprop++){
81 shmem_ptl_vec(iptl*PTL_N_DBL + iprop) = vptl[ivec].
data[iprop*VEC_LEN + iptl];
86 for(
int idbl = ith; idbl<VEC_LEN*PTL_N_DBL; idbl+=team_size){
87 vptl[ivec].
data[idbl] = shmem_ptl_vec(idbl);
Definition: particles.hpp:134
double data[T *VEC_LEN]
Definition: particles.hpp:135
void transpose_particles_from_AoSoA_to_AoS(Cabana::AoSoA< DataType, DeviceType, VEC_LEN > &local_particles, int ioffset, int n_vec)
Definition: transpose_particles.hpp:51
void transpose_particles_from_AoS_to_AoSoA(Cabana::AoSoA< DataType, DeviceType, VEC_LEN > &local_particles, int ioffset, int n_vec)
Definition: transpose_particles.hpp:7
#define KOKKOS_TEAM_SCRATCH_OPT
Definition: space_settings.hpp:77
void parallel_for(const std::string name, int n_ptl, Function func, Option option, HostAoSoA aosoa_h, DeviceAoSoA aosoa_d)
Definition: streamed_parallel_for.hpp:252