11 #ifdef __SYCL_DEVICE_ONLY__
19 #define __SPIRV_VAR_QUALIFIERS extern "C" const
21 #if defined(__NVPTX__) || defined(__AMDGCN__) || defined(__SYCL_NATIVE_CPU__)
59 typedef size_t size_t_vec
__attribute__((ext_vector_type(3)));
60 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalSize;
61 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalInvocationId;
62 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInWorkgroupSize;
63 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInNumWorkgroups;
64 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInLocalInvocationId;
65 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInWorkgroupId;
66 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalOffset;
68 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupSize;
69 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupMaxSize;
70 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInNumSubgroups;
71 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupId;
72 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupLocalInvocationId;
74 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupEqMask;
75 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupGeMask;
76 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupGtMask;
77 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupLeMask;
78 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupLtMask;
81 return __spirv_BuiltInGlobalInvocationId.x;
84 return __spirv_BuiltInGlobalInvocationId.y;
87 return __spirv_BuiltInGlobalInvocationId.z;
91 return __spirv_BuiltInGlobalSize.x;
94 return __spirv_BuiltInGlobalSize.y;
97 return __spirv_BuiltInGlobalSize.z;
101 return __spirv_BuiltInGlobalOffset.x;
104 return __spirv_BuiltInGlobalOffset.y;
107 return __spirv_BuiltInGlobalOffset.z;
111 return __spirv_BuiltInNumWorkgroups.x;
114 return __spirv_BuiltInNumWorkgroups.y;
117 return __spirv_BuiltInNumWorkgroups.z;
121 return __spirv_BuiltInWorkgroupSize.x;
124 return __spirv_BuiltInWorkgroupSize.y;
127 return __spirv_BuiltInWorkgroupSize.z;
131 return __spirv_BuiltInWorkgroupId.x;
134 return __spirv_BuiltInWorkgroupId.y;
137 return __spirv_BuiltInWorkgroupId.z;
141 return __spirv_BuiltInLocalInvocationId.x;
144 return __spirv_BuiltInLocalInvocationId.y;
147 return __spirv_BuiltInLocalInvocationId.z;
151 return __spirv_BuiltInSubgroupSize;
154 return __spirv_BuiltInSubgroupMaxSize;
157 return __spirv_BuiltInNumSubgroups;
160 return __spirv_BuiltInSubgroupId;
163 return __spirv_BuiltInSubgroupLocalInvocationId;
168 #undef __SPIRV_VAR_QUALIFIERS
174 #define __SPIRV_DEFINE_INIT_AND_GET_HELPERS(POSTFIX) \
175 template <int ID> static size_t get##POSTFIX(); \
176 template <> size_t get##POSTFIX<0>() { return __spirv_##POSTFIX##_x(); } \
177 template <> size_t get##POSTFIX<1>() { return __spirv_##POSTFIX##_y(); } \
178 template <> size_t get##POSTFIX<2>() { return __spirv_##POSTFIX##_z(); } \
180 template <int Dim, class DstT> struct InitSizesST##POSTFIX; \
182 template <class DstT> struct InitSizesST##POSTFIX<1, DstT> { \
183 static DstT initSize() { return {get##POSTFIX<0>()}; } \
186 template <class DstT> struct InitSizesST##POSTFIX<2, DstT> { \
187 static DstT initSize() { return {get##POSTFIX<1>(), get##POSTFIX<0>()}; } \
190 template <class DstT> struct InitSizesST##POSTFIX<3, DstT> { \
191 static DstT initSize() { \
192 return {get##POSTFIX<2>(), get##POSTFIX<1>(), get##POSTFIX<0>()}; \
196 template <int Dims, class DstT> DstT init##POSTFIX() { \
197 return InitSizesST##POSTFIX<Dims, DstT>::initSize(); \
200 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalSize);
201 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalInvocationId)
202 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(WorkgroupSize)
203 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(NumWorkgroups)
204 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(LocalInvocationId)
205 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(WorkgroupId)
206 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalOffset)
208 #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.