Update Kokkos library in LAMMPS to v2.7.24
This commit is contained in:
@ -76,6 +76,8 @@ struct LayoutLeft {
|
||||
|
||||
size_t dimension[ ARRAY_LAYOUT_MAX_RANK ];
|
||||
|
||||
enum { is_extent_constructible = true };
|
||||
|
||||
LayoutLeft( LayoutLeft const & ) = default ;
|
||||
LayoutLeft( LayoutLeft && ) = default ;
|
||||
LayoutLeft & operator = ( LayoutLeft const & ) = default ;
|
||||
@ -108,6 +110,8 @@ struct LayoutRight {
|
||||
|
||||
size_t dimension[ ARRAY_LAYOUT_MAX_RANK ];
|
||||
|
||||
enum { is_extent_constructible = true };
|
||||
|
||||
LayoutRight( LayoutRight const & ) = default ;
|
||||
LayoutRight( LayoutRight && ) = default ;
|
||||
LayoutRight & operator = ( LayoutRight const & ) = default ;
|
||||
@ -132,6 +136,8 @@ struct LayoutStride {
|
||||
size_t dimension[ ARRAY_LAYOUT_MAX_RANK ] ;
|
||||
size_t stride[ ARRAY_LAYOUT_MAX_RANK ] ;
|
||||
|
||||
enum { is_extent_constructible = false };
|
||||
|
||||
LayoutStride( LayoutStride const & ) = default ;
|
||||
LayoutStride( LayoutStride && ) = default ;
|
||||
LayoutStride & operator = ( LayoutStride const & ) = default ;
|
||||
@ -222,6 +228,8 @@ struct LayoutTileLeft {
|
||||
|
||||
size_t dimension[ ARRAY_LAYOUT_MAX_RANK ] ;
|
||||
|
||||
enum { is_extent_constructible = true };
|
||||
|
||||
LayoutTileLeft( LayoutTileLeft const & ) = default ;
|
||||
LayoutTileLeft( LayoutTileLeft && ) = default ;
|
||||
LayoutTileLeft & operator = ( LayoutTileLeft const & ) = default ;
|
||||
@ -235,6 +243,144 @@ struct LayoutTileLeft {
|
||||
: dimension { argN0 , argN1 , argN2 , argN3 , argN4 , argN5 , argN6 , argN7 } {}
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
enum class Iterate
|
||||
{
|
||||
Default,
|
||||
Left, // Left indices stride fastest
|
||||
Right // Right indices stride fastest
|
||||
};
|
||||
|
||||
// To check for LayoutTiled
|
||||
// This is to hide extra compile-time 'identifier' info within the LayoutTiled class by not relying on template specialization to include the ArgN*'s
|
||||
template < typename LayoutTiledCheck, class Enable = void >
|
||||
struct is_layouttiled : std::false_type {};
|
||||
|
||||
#ifndef KOKKOS_ENABLE_DEPRECATED_CODE
|
||||
template < typename LayoutTiledCheck >
|
||||
struct is_layouttiled< LayoutTiledCheck, typename std::enable_if<LayoutTiledCheck::is_array_layout_tiled>::type > : std::true_type {};
|
||||
|
||||
namespace Experimental {
|
||||
|
||||
/// LayoutTiled
|
||||
// Must have Rank >= 2
|
||||
template < Kokkos::Iterate OuterP, Kokkos::Iterate InnerP,
|
||||
unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 = 0, unsigned ArgN3 = 0, unsigned ArgN4 = 0, unsigned ArgN5 = 0, unsigned ArgN6 = 0, unsigned ArgN7 = 0,
|
||||
bool IsPowerOfTwo =
|
||||
( Impl::is_integral_power_of_two(ArgN0) &&
|
||||
Impl::is_integral_power_of_two(ArgN1) &&
|
||||
(Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) )
|
||||
)
|
||||
>
|
||||
struct LayoutTiled {
|
||||
|
||||
static_assert( IsPowerOfTwo
|
||||
, "LayoutTiled must be given power-of-two tile dimensions" );
|
||||
|
||||
#if 0
|
||||
static_assert( (Impl::is_integral_power_of_two(ArgN0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN1) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN2) || (ArgN2 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN3) || (ArgN3 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN4) || (ArgN4 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN5) || (ArgN5 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN6) || (ArgN6 == 0) ) &&
|
||||
(Impl::is_integral_power_of_two(ArgN7) || (ArgN7 == 0) )
|
||||
, "LayoutTiled must be given power-of-two tile dimensions" );
|
||||
#endif
|
||||
|
||||
typedef LayoutTiled<OuterP, InnerP, ArgN0, ArgN1, ArgN2, ArgN3, ArgN4, ArgN5, ArgN6, ArgN7, IsPowerOfTwo> array_layout ;
|
||||
static constexpr Iterate outer_pattern = OuterP;
|
||||
static constexpr Iterate inner_pattern = InnerP;
|
||||
|
||||
enum { N0 = ArgN0 };
|
||||
enum { N1 = ArgN1 };
|
||||
enum { N2 = ArgN2 };
|
||||
enum { N3 = ArgN3 };
|
||||
enum { N4 = ArgN4 };
|
||||
enum { N5 = ArgN5 };
|
||||
enum { N6 = ArgN6 };
|
||||
enum { N7 = ArgN7 };
|
||||
|
||||
size_t dimension[ ARRAY_LAYOUT_MAX_RANK ] ;
|
||||
|
||||
enum { is_extent_constructible = true };
|
||||
|
||||
LayoutTiled( LayoutTiled const & ) = default ;
|
||||
LayoutTiled( LayoutTiled && ) = default ;
|
||||
LayoutTiled & operator = ( LayoutTiled const & ) = default ;
|
||||
LayoutTiled & operator = ( LayoutTiled && ) = default ;
|
||||
|
||||
KOKKOS_INLINE_FUNCTION
|
||||
explicit constexpr
|
||||
LayoutTiled( size_t argN0 = 0 , size_t argN1 = 0 , size_t argN2 = 0 , size_t argN3 = 0
|
||||
, size_t argN4 = 0 , size_t argN5 = 0 , size_t argN6 = 0 , size_t argN7 = 0
|
||||
)
|
||||
: dimension { argN0 , argN1 , argN2 , argN3 , argN4 , argN5 , argN6 , argN7 } {}
|
||||
};
|
||||
|
||||
} // namespace Experimental
|
||||
#endif
|
||||
|
||||
|
||||
// For use with view_copy
|
||||
template < typename ... Layout >
|
||||
struct layout_iterate_type_selector {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Default ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Default ;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct layout_iterate_type_selector< Kokkos::LayoutRight > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Right ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Right ;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct layout_iterate_type_selector< Kokkos::LayoutLeft > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Left ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Left ;
|
||||
};
|
||||
|
||||
template <>
|
||||
struct layout_iterate_type_selector< Kokkos::LayoutStride > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Default ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Default ;
|
||||
};
|
||||
|
||||
#ifndef KOKKOS_ENABLE_DEPRECATED_CODE
|
||||
template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 >
|
||||
struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled<Kokkos::Iterate::Left, Kokkos::Iterate::Left, ArgN0, ArgN1, ArgN2, ArgN3, ArgN4, ArgN5, ArgN6, ArgN7, true> > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Left ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Left ;
|
||||
};
|
||||
|
||||
template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 >
|
||||
struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled<Kokkos::Iterate::Right, Kokkos::Iterate::Left, ArgN0, ArgN1, ArgN2, ArgN3, ArgN4, ArgN5, ArgN6, ArgN7, true> > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Right ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Left ;
|
||||
};
|
||||
|
||||
template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 >
|
||||
struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled<Kokkos::Iterate::Left, Kokkos::Iterate::Right, ArgN0, ArgN1, ArgN2, ArgN3, ArgN4, ArgN5, ArgN6, ArgN7, true> > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Left ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Right ;
|
||||
};
|
||||
|
||||
template < unsigned ArgN0 , unsigned ArgN1 , unsigned ArgN2 , unsigned ArgN3 , unsigned ArgN4 , unsigned ArgN5 , unsigned ArgN6 , unsigned ArgN7 >
|
||||
struct layout_iterate_type_selector< Kokkos::Experimental::LayoutTiled<Kokkos::Iterate::Right, Kokkos::Iterate::Right, ArgN0, ArgN1, ArgN2, ArgN3, ArgN4, ArgN5, ArgN6, ArgN7, true> > {
|
||||
static const Kokkos::Iterate outer_iteration_pattern = Kokkos::Iterate::Right ;
|
||||
static const Kokkos::Iterate inner_iteration_pattern = Kokkos::Iterate::Right ;
|
||||
};
|
||||
#endif
|
||||
|
||||
} // namespace Kokkos
|
||||
|
||||
#endif // #ifndef KOKKOS_LAYOUT_HPP
|
||||
|
||||
Reference in New Issue
Block a user