19 #include <type_traits>
22 inline namespace _V1 {
29 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
30 template <
typename>
class OperationCurrentT,
int... Indexes>
34 template <
int Dimensions>
class group;
36 namespace ext::oneapi {
39 namespace experimental {
40 template <
typename Group, std::
size_t Extent>
class group_with_scratchpad;
49 template <
int Dimensions>
52 template <
int Dimensions>
69 template <
typename Group, std::
size_t Extent>
78 template <
typename T>
struct is_group : std::false_type {};
80 template <
int Dimensions>
85 template <>
struct is_sub_group<ext::oneapi::sub_group> : std::true_type {};
90 : std::integral_constant<bool,
91 is_group<T>::value || is_sub_group<T>::value> {};
107 struct is_group : std::bool_constant<detail::is_group<T>::value ||
108 detail::is_sub_group<T>::value> {};
112 namespace ext::oneapi::experimental {
126 template <
typename T,
typename R>
133 template <
typename T,
int N>
135 template <
typename T>
141 template <
typename T>
169 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
170 template <
typename>
class OperationCurrentT,
int... Indexes>
172 OperationCurrentT, Indexes...>> {
182 template <
typename T,
typename =
void>
185 template <
typename T>
187 T,
std::void_t<decltype(__builtin_reduce_max(std::declval<T>()))>>
190 template <
typename T>
193 template <
typename T>
195 using type = decltype(__builtin_reduce_max(std::declval<T>()));
209 template <
typename T,
typename B>
221 template <
typename T,
typename R>
226 template <
typename T,
typename R>
237 using type = std::make_signed_t<T>;
246 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
247 template <
typename>
class OperationCurrentT,
int... Indexes>
249 OperationCurrentT, Indexes...>> {
258 using type = std::make_unsigned_t<T>;
267 template <
typename VecT,
typename OperationLeftT,
typename OperationRightT,
268 template <
typename>
class OperationCurrentT,
int... Indexes>
270 OperationCurrentT, Indexes...>> {
278 template <
typename T,
int N,
template <
typename>
class S>
282 template <
typename>
struct is_vec : std::false_type {};
283 template <
typename T,
int N>
struct is_vec<
sycl::
vec<T, N>> : std::true_type {};
296 template <
typename>
struct is_marray : std::false_type {};
297 template <
typename T,
size_t N>
303 template <
typename T>
307 template <
typename T>
312 template <
typename T>
317 template <
typename T>
319 : std::bool_constant<is_integral<T>::value || is_floating_point<T>::value> {
322 template <
typename T>
324 : std::bool_constant<!is_vec<T>::value && is_arithmetic<T>::value> {};
326 template <
typename T>
329 template <
typename T>
331 : std::bool_constant<is_vec<T>::value && is_arithmetic<T>::value> {};
334 template <
typename T>
336 : std::bool_constant<std::is_same_v<std::remove_cv_t<T>, bool>> {};
338 template <
typename T>
340 : std::bool_constant<is_vec<T>::value &&
341 is_scalar_bool<vector_element_t<T>>::value> {};
343 template <
typename T>
345 : std::bool_constant<is_scalar_bool<vector_element_t<T>>::value> {};
348 template <
int N>
struct Boolean;
349 template <
typename T>
struct is_boolean : std::false_type {};
363 template <
typename T>
382 template <
typename ElementType, access::address_space Space>
384 multi_ptr<ElementType, Space, access::decorated::yes>> : std::true_type {};
386 template <
typename ElementType, access::address_space Space>
388 multi_ptr<ElementType, Space, access::decorated::no>> : std::true_type {};
397 template <
typename ElementType, access::address_space Space>
399 multi_ptr<ElementType, Space, access::decorated::legacy>> : std::true_type {
420 template <
typename T>
426 template <
typename T,
typename SpaceList>
429 template <
typename T,
typename SpaceList>
436 : std::bool_constant<is_one_of_spaces<Space, SpaceList>::value> {};
438 template <
typename T,
typename SpaceList>
442 template <
typename T,
typename SpaceList>
456 template <
typename T,
typename TL>
461 template <
typename T>
463 T,
std::enable_if_t<is_contained<T, gtl::scalar_floating_list>::value, T>> {
467 template <
typename T>
469 T,
std::enable_if_t<is_contained<T, gtl::scalar_signed_integer_list>::value,
474 template <
typename T>
477 is_contained<T, gtl::scalar_unsigned_integer_list>::value, T>> {
485 static constexpr
bool found = !std::is_same_v<upper_type, void>;
486 using type = std::conditional_t<found, new_type, void>;
489 template <
typename T,
size_t N>
494 static constexpr
bool found = !std::is_same_v<upper_type, void>;
495 using type = std::conditional_t<found, new_type, void>;
504 #if defined(RESTRICT_WRITE_ACCESS_TO_CONSTANT_PTR)
505 template <access::address_space AS,
class DataT>
507 typename std::conditional<AS == access::address_space::constant_space,
508 const DataT, DataT>::type;
510 template <access::address_space AS,
class DataT>
527 template <
typename T0,
typename... Ts>
528 inline constexpr
bool all_same_v = (... && std::is_same_v<T0, Ts>);
538 template <
typename T,
typename From,
typename To,
typename... Rest>
540 using type = std::conditional_t<std::is_same_v<From, T>, To,
543 template <
typename T,
typename... Ts> constexpr
bool CheckTypeIn() {
544 constexpr
bool SameType[] = {
545 std::is_same_v<std::remove_cv_t<T>, std::remove_cv_t<Ts>>...};
547 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++...
Provides a cross-patform vector class template that works efficiently on SYCL devices as well as in h...
constexpr bool check_type_in_v
typename change_base_type< T, B >::type change_base_type_t
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_group_helper_v
constexpr bool is_user_constructed_group_v
constexpr bool is_fixed_topology_group_v
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor 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< 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