18 #include <type_traits>
21 inline namespace _V1 {
28 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
29 template <
typename>
class OperationCurrentT,
int... Indexes>
33 template <
int Dimensions>
class group;
35 namespace ext::oneapi {
38 namespace experimental {
39 template <
typename Group, std::
size_t Extent>
class group_with_scratchpad;
48 template <
int Dimensions>
51 template <
int Dimensions>
68 template <
typename Group, std::
size_t Extent>
77 template <
typename T>
struct is_group : std::false_type {};
79 template <
int Dimensions>
84 template <>
struct is_sub_group<ext::oneapi::sub_group> : std::true_type {};
89 : std::integral_constant<bool,
90 is_group<T>::value || is_sub_group<T>::value> {};
106 struct is_group : std::bool_constant<detail::is_group<T>::value ||
107 detail::is_sub_group<T>::value> {};
111 namespace ext::oneapi::experimental {
125 template <
typename T,
typename R>
132 template <
typename T,
int N>
134 template <
typename T>
140 template <
typename T>
168 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
169 template <
typename>
class OperationCurrentT,
int... Indexes>
171 OperationCurrentT, Indexes...>> {
185 template <
typename T,
typename =
void>
188 template <
typename T>
190 T,
std::void_t<decltype(__builtin_reduce_max(std::declval<T>()))>>
193 template <
typename T>
196 template <
typename T>
198 using type = decltype(__builtin_reduce_max(std::declval<T>()));
201 template <
typename T>
215 template <
typename T,
typename B>
227 template <
typename T,
typename R>
232 template <
typename T,
typename R>
243 using type = std::make_signed_t<T>;
252 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
253 template <
typename>
class OperationCurrentT,
int... Indexes>
255 OperationCurrentT, Indexes...>> {
264 using type = std::make_unsigned_t<T>;
273 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
274 template <
typename>
class OperationCurrentT,
int... Indexes>
276 OperationCurrentT, Indexes...>> {
284 template <
typename T,
int N,
template <
typename>
class S>
288 template <
typename>
struct is_vec : std::false_type {};
289 template <
typename T,
int N>
struct is_vec<
sycl::
vec<T, N>> : std::true_type {};
303 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
304 template <
typename>
class OperationCurrentT,
int... Indexes>
306 OperationCurrentT, Indexes...>> : std::true_type {};
312 template <
typename T>
316 template <
typename>
struct is_marray : std::false_type {};
317 template <
typename T,
size_t N>
323 template <
typename T>
327 template <
typename T>
332 template <
typename T>
337 template <
typename T>
339 : std::bool_constant<is_integral<T>::value || is_floating_point<T>::value> {
342 template <
typename T>
344 : std::bool_constant<!is_vec_or_swizzle_v<T> && !is_ext_vector_v<T> &&
345 !is_marray_v<T> && is_arithmetic<T>::value> {};
347 template <
typename T>
350 template <
typename T>
352 : std::bool_constant<(is_vec_or_swizzle_v<T> || is_ext_vector_v<T> ||
354 is_arithmetic<T>::value> {};
357 template <
typename T>
359 : std::bool_constant<std::is_same_v<std::remove_cv_t<T>, bool>> {};
361 template <
typename T>
363 : std::bool_constant<is_vec<T>::value &&
364 is_scalar_bool<vector_element_t<T>>::value> {};
366 template <
typename T>
368 : std::bool_constant<is_scalar_bool<vector_element_t<T>>::value> {};
371 template <
int N>
struct Boolean;
372 template <
typename T>
struct is_boolean : std::false_type {};
386 template <
typename T>
405 template <
typename ElementType, access::address_space Space>
407 multi_ptr<ElementType, Space, access::decorated::yes>> : std::true_type {};
409 template <
typename ElementType, access::address_space Space>
411 multi_ptr<ElementType, Space, access::decorated::no>> : std::true_type {};
420 template <
typename ElementType, access::address_space Space>
422 multi_ptr<ElementType, Space, access::decorated::legacy>> : std::true_type {
443 template <
typename T>
449 template <
typename T,
typename SpaceList>
452 template <
typename T,
typename SpaceList>
459 : std::bool_constant<is_one_of_spaces<Space, SpaceList>::value> {};
461 template <
typename T,
typename SpaceList>
465 template <
typename T,
typename SpaceList>
479 template <
typename T,
typename TL>
484 template <
typename T>
486 T,
std::enable_if_t<is_contained<T, gtl::scalar_floating_list>::value, T>> {
490 template <
typename T>
492 T,
std::enable_if_t<is_contained<T, gtl::scalar_signed_integer_list>::value,
497 template <
typename T>
500 is_contained<T, gtl::scalar_unsigned_integer_list>::value, T>> {
508 static constexpr
bool found = !std::is_same_v<upper_type, void>;
509 using type = std::conditional_t<found, new_type, void>;
512 template <
typename T,
size_t N>
517 static constexpr
bool found = !std::is_same_v<upper_type, void>;
518 using type = std::conditional_t<found, new_type, void>;
527 #if defined(RESTRICT_WRITE_ACCESS_TO_CONSTANT_PTR)
528 template <access::address_space AS,
class DataT>
530 typename std::conditional<AS == access::address_space::constant_space,
531 const DataT, DataT>::type;
533 template <access::address_space AS,
class DataT>
550 template <
typename T0,
typename... Ts>
551 inline constexpr
bool all_same_v = (... && std::is_same_v<T0, Ts>);
561 template <
typename T,
typename From,
typename To,
typename... Rest>
563 using type = std::conditional_t<std::is_same_v<From, T>, To,
566 template <
typename T,
typename... Ts> constexpr
bool CheckTypeIn() {
567 constexpr
bool SameType[] = {
568 std::is_same_v<std::remove_cv_t<T>, std::remove_cv_t<Ts>>...};
570 for (
size_t I = 0; I <
sizeof...(Ts); ++I)
Provides a cross-platform math array class template that works on SYCL devices as well as in host C++...
constexpr bool check_type_in_v
typename change_base_type< T, B >::type change_base_type_t
constexpr bool is_vec_or_swizzle_v
constexpr bool is_scalar_arithmetic_v
constexpr bool is_pointer_v
constexpr bool is_boolean_v
typename T::value_type marray_element_t
constexpr bool is_marray_v
constexpr bool is_gen_based_on_type_sizeof_v
constexpr bool is_non_legacy_multi_ptr_v
typename remove_pointer< T >::type remove_pointer_t
typename make_larger< T >::type make_larger_t
typename make_unsigned< T >::type make_unsigned_t
typename vector_element_impl< T >::type vector_element_impl_t
constexpr bool is_address_space_compliant_v
constexpr bool is_ext_vector_v
typename get_elem_type< T >::type get_elem_type_t
constexpr bool all_same_v
constexpr bool is_legacy_multi_ptr_v
constexpr bool CheckTypeIn()
typename vector_element< T >::type vector_element_t
typename copy_cv_qualifiers< T, R >::type copy_cv_qualifiers_t
typename make_signed< T >::type make_signed_t
constexpr bool is_multi_ptr_v
std::array< unsigned char, 16 > uuid_type
find_type_t< TypeList, is_type_size_equal, T > find_same_size_type_t
constexpr bool is_fixed_size_group_v
find_type_t< TypeList, is_type_size_double_of, T > find_twice_as_large_type_t
std::integral_constant< int, V > int_constant
typename make_type_impl< T, TL >::type make_type_t
constexpr bool is_generic_group_v
constexpr bool is_swizzle_v
constexpr bool is_group_helper_v
constexpr bool is_user_constructed_group_v
constexpr bool is_fixed_topology_group_v
class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
constexpr bool is_group_v
sycl::detail::half_impl::half half
typename copy_cv_qualifiers_impl< T, std::remove_cv_t< R > >::type type
std::tuple< Args... > args_type
typename get_elem_type_unqual< std::remove_cv_t< VecT > >::type type
decltype(__builtin_reduce_max(std::declval< T >())) type
static constexpr int size
find_twice_as_large_type_t< gtl::scalar_floating_list, T > type
find_twice_as_large_type_t< gtl::scalar_signed_integer_list, T > type
find_twice_as_large_type_t< gtl::scalar_unsigned_integer_list, T > type
typename make_larger_impl< base_type, base_type >::type upper_type
marray_element_t< marray< T, N > > base_type
std::conditional_t< found, new_type, void > type
typename make_larger_impl< base_type, base_type >::type upper_type
vector_element_t< vec< T, N > > base_type
std::conditional_t< found, new_type, void > type
typename make_larger_impl< T, T >::type type
make_signed_t< std::remove_cv_t< VecT > > type
const make_signed_t< T > type
std::make_signed_t< T > type
typename make_type_impl< T, TL >::type scalar_type
find_same_size_type_t< TL, T > type
make_unsigned_t< std::remove_cv_t< VecT > > type
const make_unsigned_t< T > type
std::make_unsigned_t< T > type
std::conditional_t< std::is_same_v< From, T >, To, typename map_type< T, Rest... >::type > type
copy_cv_qualifiers_t< T, vector_element_impl_t< std::remove_cv_t< T > >> type