|
OpenFPM
5.2.0
Project that contain the implementation of distributed structures
|
|
4 #include "copy_general.hpp"
5 #include "util/cuda_util.hpp"
6 #include "util/multi_array_openfpm/multi_array_ref_openfpm.hpp"
9 template<
typename ArrTypeView>
19 decltype(arr[0][0]) operator[](
int comp)
21 return arr[comp][pos];
24 decltype(std::declval<const ArrTypeView>()[0][0]) operator[](
int comp)
const
26 return arr[comp][pos];
60 __device__ __host__
static inline void meta_copy_(
const T & src, T & dst)
71 __device__ __host__
static inline void meta_copy_(
const T & src, T && dst)
83 template<
typename Tsrc,
typename Tdst>
92 __device__ __host__
static inline void meta_copy_d_(
const Tsrc & src, Tdst & dst)
104 __device__ __host__
static inline void meta_copy_d_(
const Tsrc & src, Tdst && dst)
112 template<
typename T,
size_t N1>
121 __device__ __host__
static inline void meta_copy_(
const T src[N1], T dst[N1])
123 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
135 template<
typename T2>
138 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
150 template<
typename v_mpl>
154 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
166 template<
typename v_mpl>
170 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
178 template<
typename Tsrc,
typename Tdst,
size_t N1>
187 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1], Tdst && dst)
189 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
201 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1], Tdst & dst)
203 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
211 template<
typename Tsrc,
typename Tdst,
size_t N1>
220 __device__ __host__
static inline void meta_copy_d_(
const Tsrc & src, Tdst dst[N1])
222 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
230 template<
typename Tsrc,
typename Tdst,
size_t N1>
239 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1], Tdst dst[N1])
241 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
249 template<
typename T,
size_t N1,
size_t N2>
258 __device__ __host__
static inline void meta_copy_(
const T src[N1][N2], T dst[N1][N2])
260 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
262 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
275 template<
typename v_mpl>
279 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
281 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
294 template<
typename v_mpl>
298 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
300 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
309 template<
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2>
312 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1][N2], Tdst && dst)
320 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
322 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
329 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1][N2], Tdst & dst)
337 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
339 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
348 template<
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2>
357 __device__ __host__
static inline void meta_copy_d_(
const Tsrc & src, Tdst dst[N1][N2])
359 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
361 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
372 template<
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2>
381 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1][N2], Tdst dst[N1][N2])
383 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
385 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
395 template<
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2,
size_t N3>
398 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1][N2][N3], Tdst && dst)
406 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
408 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
410 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
418 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1][N2][N3], Tdst & dst)
426 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
428 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
430 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
441 template<
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2,
size_t N3>
450 __device__ __host__
static inline void meta_copy_d_(
const Tsrc & src, Tdst dst[N1][N2][N3])
452 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
454 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
456 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
467 template<
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2,
size_t N3>
476 __device__ __host__
static inline void meta_copy_d_(
const Tsrc src[N1][N2][N3], Tdst dst[N1][N2][N3])
478 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
480 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
482 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
492 template<
typename T,
size_t N1,
size_t N2,
size_t N3>
501 static inline void meta_copy_(
const T src[N1][N2][N3], T dst[N1][N2][N3])
503 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
505 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
507 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
517 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4>
526 static inline void meta_copy_(
const T src[N1][N2][N3][N4], T dst[N1][N2][N3][N4])
528 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
530 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
532 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
534 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
545 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4,
size_t N5>
554 static inline void meta_copy_(
const T src[N1][N2][N3][N4][N5], T dst[N1][N2][N3][N4][N5])
556 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
558 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
560 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
562 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
564 for (
size_t i5 = 0 ; i5 < N5 ; i5++)
576 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4,
size_t N5,
size_t N6>
585 static inline void meta_copy_(
const T src[N1][N2][N3][N4][N5][N6], T dst[N1][N2][N3][N4][N5][N6])
587 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
589 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
591 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
593 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
595 for (
size_t i5 = 0 ; i5 < N5 ; i5++)
597 for (
size_t i6 = 0 ; i6 < N6 ; i6++)
599 copy_general<T>(src[i1][i2][i3][i4][i5][i6],dst[i1][i2][i3][i4][i5][i6]);
610 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4,
size_t N5,
size_t N6,
size_t N7>
619 static inline void meta_copy_(
const T src[N1][N2][N3][N4][N5][N6][N7], T dst[N1][N2][N3][N4][N5][N6][N7])
621 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
623 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
625 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
627 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
629 for (
size_t i5 = 0 ; i5 < N5 ; i5++)
631 for (
size_t i6 = 0 ; i6 < N6 ; i6++)
633 for (
size_t i7 = 0 ; i7 < N7 ; i7++)
635 copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7],dst[i1][i2][i3][i4][i5][i6][i7]);
647 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4,
size_t N5,
size_t N6,
size_t N7,
size_t N8>
656 static inline void meta_copy_(
const T src[N1][N2][N3][N4][N5][N6][N7][N8], T dst[N1][N2][N3][N4][N5][N6][N7][N8])
658 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
660 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
662 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
664 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
666 for (
size_t i5 = 0 ; i5 < N5 ; i5++)
668 for (
size_t i6 = 0 ; i6 < N6 ; i6++)
670 for (
size_t i7 = 0 ; i7 < N7 ; i7++)
672 for (
size_t i8 = 0 ; i8 < N8 ; i8++)
674 copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8],dst[i1][i2][i3][i4][i5][i6][i7][i8]);
687 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4,
size_t N5,
size_t N6,
size_t N7,
size_t N8,
size_t N9>
696 static inline void meta_copy_(
const T src[N1][N2][N3][N4][N5][N6][N7][N8][N9], T dst[N1][N2][N3][N4][N5][N6][N7][N8][N9])
698 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
700 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
702 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
704 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
706 for (
size_t i5 = 0 ; i5 < N5 ; i5++)
708 for (
size_t i6 = 0 ; i6 < N6 ; i6++)
710 for (
size_t i7 = 0 ; i7 < N7 ; i7++)
712 for (
size_t i8 = 0 ; i8 < N8 ; i8++)
714 for (
size_t i9 = 0 ; i9 < N9 ; i9++)
716 copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8][i9],dst[i1][i2][i3][i4][i5][i6][i7][i8][i9]);
730 template<
typename T,
size_t N1,
size_t N2,
size_t N3,
size_t N4,
size_t N5,
size_t N6,
size_t N7,
size_t N8,
size_t N9,
size_t N10>
731 struct meta_copy<T[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10]>
739 static inline void meta_copy_(
const T src[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10], T dst[N1][N2][N3][N4][N5][N6][N7][N8][N9][N10])
741 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
743 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
745 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
747 for (
size_t i4 = 0 ; i4 < N4 ; i4++)
749 for (
size_t i5 = 0 ; i5 < N5 ; i5++)
751 for (
size_t i6 = 0 ; i6 < N6 ; i6++)
753 for (
size_t i7 = 0 ; i7 < N7 ; i7++)
755 for (
size_t i8 = 0 ; i8 < N8 ; i8++)
757 for (
size_t i9 = 0 ; i9 < N9 ; i9++)
759 for (
size_t i10 = 0 ; i10 < N10 ; i10++)
761 copy_general<T>(src[i1][i2][i3][i4][i5][i6][i7][i8][i9][i10],dst[i1][i2][i3][i4][i5][i6][i7][i8][i9][i10]);
799 template<
template<
typename,
typename>
class op,
typename T>
826 template<
template<
typename,
typename>
class op,
typename T,
typename vmpl>
837 for (
size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
845 template<
template<
typename,
typename>
class op,
typename T,
size_t N1>
856 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
864 template<
template<
typename,
typename>
class op,
typename T,
typename vmpl>
875 for (
size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
877 for (
size_t i2 = 0 ; i2 < boost::mpl::at<vmpl,boost::mpl::int_<1>>::type::value ; i2++)
886 template<
template<
typename,
typename>
class op,
typename T,
size_t N1,
size_t N2>
897 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
899 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
909 template<
template<
typename,
typename>
class op,
typename T,
size_t N1,
size_t N2,
size_t N3>
918 static inline void meta_copy_op_(
const T src[N1][N2][N3], T dst[N1][N2][N3])
920 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
922 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
924 for (
size_t i3 = 0 ; i3 < N3 ; i3++)
934 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst>
961 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst,
size_t N1>
970 __device__ __host__
static inline void meta_copy_op_d_(
const Tsrc src[N1], Tdst && dst)
972 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
980 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst,
size_t N1>
989 __device__ __host__
static inline void meta_copy_op_d_(
const Tsrc & src, Tdst dst[N1])
991 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
999 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst,
typename vmpl>
1010 for (
size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
1018 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst,
size_t N1>
1029 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
1037 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst,
size_t N1,
size_t N2>
1046 __device__ __host__
static inline void meta_copy_op_d_(
const Tsrc src[N1][N2], Tdst dst[N1][N2])
1048 for (
size_t i1 = 0 ; i1 < N1 ; i1++)
1050 for (
size_t i2 = 0 ; i2 < N2 ; i2++)
1059 template<
template<
typename,
typename>
class op,
typename Tsrc,
typename Tdst,
typename vmpl>
1070 for (
size_t i1 = 0 ; i1 < boost::mpl::at<vmpl,boost::mpl::int_<0>>::type::value ; i1++)
1072 for (
size_t i2 = 0 ; i2 < boost::mpl::at<vmpl,boost::mpl::int_<1>>::type::value ; i2++)
convert a type into constant type
structure to copy aggregates applying an operation
structure to copy aggregates