11 #ifdef __SYCL_DEVICE_ONLY__
18 #define __SPIRV_VAR_QUALIFIERS extern "C" const
20 #if defined(__NVPTX__) || defined(__AMDGCN__) || defined(__SYCL_NATIVE_CPU__)
58 typedef size_t size_t_vec
__attribute__((ext_vector_type(3)));
59 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalSize;
60 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalInvocationId;
61 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInWorkgroupSize;
62 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInNumWorkgroups;
63 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInLocalInvocationId;
64 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInWorkgroupId;
65 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalOffset;
67 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupSize;
68 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupMaxSize;
69 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInNumSubgroups;
70 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupId;
71 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupLocalInvocationId;
73 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupEqMask;
74 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupGeMask;
75 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupGtMask;
76 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupLeMask;
77 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupLtMask;
80 return __spirv_BuiltInGlobalInvocationId.x;
83 return __spirv_BuiltInGlobalInvocationId.y;
86 return __spirv_BuiltInGlobalInvocationId.z;
90 return __spirv_BuiltInGlobalSize.x;
93 return __spirv_BuiltInGlobalSize.y;
96 return __spirv_BuiltInGlobalSize.z;
100 return __spirv_BuiltInGlobalOffset.x;
103 return __spirv_BuiltInGlobalOffset.y;
106 return __spirv_BuiltInGlobalOffset.z;
110 return __spirv_BuiltInNumWorkgroups.x;
113 return __spirv_BuiltInNumWorkgroups.y;
116 return __spirv_BuiltInNumWorkgroups.z;
120 return __spirv_BuiltInWorkgroupSize.x;
123 return __spirv_BuiltInWorkgroupSize.y;
126 return __spirv_BuiltInWorkgroupSize.z;
130 return __spirv_BuiltInWorkgroupId.x;
133 return __spirv_BuiltInWorkgroupId.y;
136 return __spirv_BuiltInWorkgroupId.z;
140 return __spirv_BuiltInLocalInvocationId.x;
143 return __spirv_BuiltInLocalInvocationId.y;
146 return __spirv_BuiltInLocalInvocationId.z;
150 return __spirv_BuiltInSubgroupSize;
153 return __spirv_BuiltInSubgroupMaxSize;
156 return __spirv_BuiltInNumSubgroups;
159 return __spirv_BuiltInSubgroupId;
162 return __spirv_BuiltInSubgroupLocalInvocationId;
167 #undef __SPIRV_VAR_QUALIFIERS
173 #define __SPIRV_DEFINE_INIT_AND_GET_HELPERS(POSTFIX) \
174 template <int ID> static size_t get##POSTFIX(); \
175 template <> size_t get##POSTFIX<0>() { return __spirv_##POSTFIX##_x(); } \
176 template <> size_t get##POSTFIX<1>() { return __spirv_##POSTFIX##_y(); } \
177 template <> size_t get##POSTFIX<2>() { return __spirv_##POSTFIX##_z(); } \
179 template <int Dim, class DstT> struct InitSizesST##POSTFIX; \
181 template <class DstT> struct InitSizesST##POSTFIX<1, DstT> { \
182 static DstT initSize() { return {get##POSTFIX<0>()}; } \
185 template <class DstT> struct InitSizesST##POSTFIX<2, DstT> { \
186 static DstT initSize() { return {get##POSTFIX<1>(), get##POSTFIX<0>()}; } \
189 template <class DstT> struct InitSizesST##POSTFIX<3, DstT> { \
190 static DstT initSize() { \
191 return {get##POSTFIX<2>(), get##POSTFIX<1>(), get##POSTFIX<0>()}; \
195 template <int Dims, class DstT> DstT init##POSTFIX() { \
196 return InitSizesST##POSTFIX<Dims, DstT>::initSize(); \
199 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalSize);
200 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalInvocationId)
201 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(WorkgroupSize)
202 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(NumWorkgroups)
203 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(LocalInvocationId)
204 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(WorkgroupId)
205 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalOffset)
207 #undef __SPIRV_DEFINE_INIT_AND_GET_HELPERS
#define __DPCPP_SYCL_EXTERNAL
__attribute__((always_inline)) auto invoke_simd(sycl
The invoke_simd free function invokes a SIMD function using all work-items in a sub_group.