15 inline namespace _V1 {
16 namespace ext::oneapi::experimental {
23 template <cache_level Level,
typename H
int>
26 std::integral_constant<cache_level, Level>, Hint>;
29 template <cache_level Level,
typename H
int>
53 template <cache_level Level,
typename H
int>
55 static constexpr
const char *
name = std::is_same_v<Hint, nontemporal>
56 ?
"sycl-prefetch-hint-nt"
57 :
"sycl-prefetch-hint";
58 static constexpr
int value =
static_cast<int>(Level);
61 template <access::address_space AS>
66 template <access_mode mode>
70 template <
typename T,
typename Properties>
72 #ifdef __SYCL_DEVICE_ONLY__
73 auto *ptrGlobalAS = __SYCL_GenericCastToPtrExplicit_ToGlobal<const char>(ptr);
74 const __attribute__((opencl_global))
char *ptrAnnotated =
nullptr;
75 if constexpr (!
properties.template has_property<prefetch_hint_key>()) {
76 ptrAnnotated = __builtin_intel_sycl_ptr_annotation(
79 auto prop =
properties.template get_property<prefetch_hint_key>();
80 ptrAnnotated = __builtin_intel_sycl_ptr_annotation(
92 template <
typename Group,
typename T,
typename Properties>
102 template <
typename Properties = empty_properties_t>
103 std::enable_if_t<is_property_list_v<std::decay_t<Properties>>>
108 template <
typename Properties = empty_properties_t>
109 std::enable_if_t<is_property_list_v<std::decay_t<Properties>>>
114 template <
typename T,
typename Properties = empty_properties_t>
115 std::enable_if_t<is_property_list_v<std::decay_t<Properties>>>
120 template <
typename T,
typename Properties = empty_properties_t>
121 std::enable_if_t<is_property_list_v<std::decay_t<Properties>>>
128 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
129 is_property_list_v<std::decay_t<Properties>>>
137 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
138 is_property_list_v<std::decay_t<Properties>>>
147 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
148 is_property_list_v<std::decay_t<Properties>>>
157 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
158 is_property_list_v<std::decay_t<Properties>>>
168 std::enable_if_t<detail::check_prefetch_acc_mode<AccessMode> &&
182 std::enable_if_t<detail::check_prefetch_acc_mode<AccessMode> &&
188 size_t offset,
size_t count, Properties
properties = {}) {
192 template <
typename Group,
typename Properties = empty_properties_t>
193 std::enable_if_t<sycl::is_group_v<std::decay_t<Group>> &&
194 is_property_list_v<std::decay_t<Properties>>>
199 template <
typename Group,
typename Properties = empty_properties_t>
200 std::enable_if_t<sycl::is_group_v<std::decay_t<Group>> &&
201 is_property_list_v<std::decay_t<Properties>>>
206 template <
typename Group,
typename T,
typename Properties = empty_properties_t>
207 std::enable_if_t<sycl::is_group_v<std::decay_t<Group>> &&
208 is_property_list_v<std::decay_t<Properties>>>
213 template <
typename Group,
typename T,
typename Properties = empty_properties_t>
214 std::enable_if_t<sycl::is_group_v<std::decay_t<Group>> &&
215 is_property_list_v<std::decay_t<Properties>>>
223 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
224 sycl::is_group_v<std::decay_t<Group>> &&
225 is_property_list_v<std::decay_t<Properties>>>
234 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
235 sycl::is_group_v<std::decay_t<Group>> &&
236 is_property_list_v<std::decay_t<Properties>>>
245 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
246 sycl::is_group_v<std::decay_t<Group>> &&
247 is_property_list_v<std::decay_t<Properties>>>
256 std::enable_if_t<detail::check_prefetch_AS<AddressSpace> &&
257 sycl::is_group_v<std::decay_t<Group>> &&
258 is_property_list_v<std::decay_t<Properties>>>
264 template <
typename Group,
typename DataT,
int Dimensions,
268 std::enable_if_t<detail::check_prefetch_acc_mode<AccessMode> &&
279 template <
typename Group,
typename DataT,
int Dimensions,
283 std::enable_if_t<detail::check_prefetch_acc_mode<AccessMode> &&
290 size_t offset,
size_t count, Properties
properties = {}) {
A unique identifier of an item in an index space.
constexpr bool is_property_list_v
void prefetch_impl(T *ptr, size_t bytes, Properties properties)
void joint_prefetch_impl(Group g, T *ptr, size_t bytes, Properties properties)
constexpr bool check_prefetch_acc_mode
constexpr bool check_prefetch_AS
constexpr prefetch_hint_key::value_t< cache_level::L2, void > prefetch_hint_L2
void prefetch(handler &CGH, void *Ptr, size_t NumBytes)
constexpr prefetch_hint_key::value_t< cache_level::L1, void > prefetch_hint_L1
constexpr prefetch_hint_key::value_t< cache_level::L3, nontemporal > prefetch_hint_L3_nt
constexpr prefetch_hint_key::value_t< cache_level::L2, nontemporal > prefetch_hint_L2_nt
constexpr prefetch_hint_key::value_t< Level, Hint > prefetch_hint
constexpr prefetch_hint_key::value_t< cache_level::L1, nontemporal > prefetch_hint_L1_nt
constexpr prefetch_hint_key::value_t< cache_level::L4, nontemporal > prefetch_hint_L4_nt
constexpr prefetch_hint_key::value_t< cache_level::L3, void > prefetch_hint_L3
constexpr prefetch_hint_key::value_t< cache_level::L4, void > prefetch_hint_L4
decltype(properties{}) empty_properties_t
std::enable_if_t< sycl::is_group_v< std::decay_t< Group > > &&is_property_list_v< std::decay_t< Properties > > > joint_prefetch(Group g, void *ptr, Properties properties={})
__attribute__((always_inline)) auto invoke_simd(sycl
The invoke_simd free function invokes a SIMD function using all work-items in a sub_group.
class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
constexpr mode_tag_t< access_mode::read_write > read_write
class __SYCL_EBO __SYCL_SPECIAL_CLASS IsPlaceholder
class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode
constexpr bool is_group_v
void __spirv_ocl_prefetch(const char *Ptr, size_t NumBytes) noexcept