18 #define SYCL_EXT_INTEL_ESIMD_MEMORY_PROPERTIES 1
21 inline namespace _V1 {
22 namespace ext::intel::esimd {
67 template <
typename PropertiesT>
71 template <
typename... PropertyValueTs>
73 :
sycl::ext::oneapi::experimental::
properties<PropertiesT>(props...) {}
76 #ifdef __cpp_deduction_guides
78 template <
typename... PropertyValueTs>
79 properties(PropertyValueTs... props)
81 PropertyValueTs...>::type>;
109 oneapi::experimental::detail::PropKind::ESIMDL1CacheHint> {
110 template <cache_h
int H
int>
116 oneapi::experimental::detail::PropKind::ESIMDL2CacheHint> {
117 template <cache_h
int H
int>
123 oneapi::experimental::detail::PropKind::ESIMDL3CacheHint> {
124 template <cache_h
int H
int>
129 template <cache_h
int H
int>
131 template <cache_h
int H
int>
133 template <cache_h
int H
int>
144 template <cache_level Level, cache_h
int H
int>
145 inline constexpr std::conditional_t<
159 template <
typename PropsT>
162 template <
typename PropsT>
168 template <
typename PropertiesT,
typename KeyT,
typename KeyValueT,
169 typename = std::enable_if_t<is_property_list_v<PropertiesT>>>
171 if constexpr (!PropertiesT::template has_property<KeyT>()) {
173 }
else if constexpr (std::is_same_v<KeyT, cache_hint_L1_key> ||
174 std::is_same_v<KeyT, cache_hint_L2_key> ||
175 std::is_same_v<KeyT, cache_hint_L3_key>) {
176 constexpr
auto ValueT = PropertiesT::template get_property<KeyT>();
179 constexpr
auto ValueT = PropertiesT::template get_property<KeyT>();
187 template <
typename PropertiesT>
192 template <
typename PropertiesT>
198 template <
typename PropertyListT,
size_t Alignment,
bool HasAlignment = true>
204 template <
typename PropertyListT,
size_t Alignment>
220 template <
typename PropertyListT,
size_t Alignment>
222 using ExpPropertyListT =
228 ExpPropertyListT::template has_property<alignment_key>()>
::type;
230 template <
typename PropertyListT,
size_t Alignment>
239 template <
size_t Alignment,
typename... LastTs>
241 properties<
std::tuple<alignment_key::value_t<Alignment>, LastTs...>>> {
244 template <
typename FirstT,
size_t Alignment,
typename... LastTs>
246 std::tuple<FirstT, alignment_key::value_t<Alignment>, LastTs...>>> {
249 template <
typename PropertyListT>
256 template <
typename PropertyListT,
size_t Alignment>
262 template <
typename PropertyListT,
size_t Alignment>
267 template <cache_h
int L1H, cache_h
int L2H,
size_t Alignment>
273 template <cache_h
int L1H, cache_h
int L2H,
size_t Alignment>
282 template <cache_h
int L1H, cache_h
int L2H>
288 namespace ext::oneapi::experimental {
290 template <__ESIMD_NS::cache_h
int H
int>
292 std::integral_constant<__ESIMD_NS::cache_hint, Hint>> {
293 using key_t = __ESIMD_NS::cache_hint_L1_key;
297 template <__ESIMD_NS::cache_h
int H
int>
299 std::integral_constant<__ESIMD_NS::cache_hint, Hint>> {
300 using key_t = __ESIMD_NS::cache_hint_L2_key;
304 template <__ESIMD_NS::cache_h
int H
int>
306 std::integral_constant<__ESIMD_NS::cache_hint, Hint>> {
307 using key_t = __ESIMD_NS::cache_hint_L3_key;
313 template <
typename... PropertyValueTs>
typename add_alignment_property_helper< ExpPropertyListT, Alignment, ExpPropertyListT::template has_property< alignment_key >()>::type type
constexpr properties(PropertyValueTs... props)
typename make_L1_L2_alignment_properties< L1H, L2H, Alignment >::type make_L1_L2_alignment_properties_t
typename add_or_replace_alignment_property< PropertyListT, Alignment >::type add_or_replace_alignment_property_t
typename make_L1_L2_properties< L1H, L2H >::type make_L1_L2_properties_t
constexpr auto getPropertyValue(KeyValueT DefaultValue)
Helper-function that returns the value of the compile time property KeyT if PropertiesT includes it.
typename add_alignment_property< PropertyListT, Alignment >::type add_alignment_property_t
constexpr bool is_property_list_v
typename remove_alignment_property< PropertyListT >::type remove_alignment_property_t
constexpr alignment_key::value_t< K > alignment
cache_level
L1, L2 or L3 cache hint levels. L3 is reserved for future use.
cache_hint
L1, L2 or L3 cache hints.
@ read_invalidate
load: asserts that the cache line containing the data will not be read again until it’s overwritten,...
@ const_cached
load, L2 cache only, next gen GPU after Xe required: asserts that the L2 cache line containing the da...
@ write_through
store: immediately write data to the subsequent furthest cache, marking the cache line in the current...
@ write_back
store: write data into cache level and mark the cache line as "dirty".
@ streaming
load: cache data to cache using the evict-first policy to minimize cache pollution caused by temporar...
@ uncached
load/store/atomic: do not cache data to cache;
constexpr cache_hint_L3_key::value_t< Hint > cache_hint_L3
constexpr cache_hint_L2_key::value_t< Hint > cache_hint_L2
constexpr cache_hint_L1_key::value_t< Hint > cache_hint_L1
sycl::ext::oneapi::experimental::alignment_key alignment_key
The 'alignment' property is used to specify the alignment of memory accessed in ESIMD memory operatio...
typename merged_properties< LHSPropertiesT, RHSPropertiesT >::type merged_properties_t
const CoordT const float level
The 'cache_hint_L1', 'cache_hint_L2' and 'cache_hint_L3' properties are used to specify L1,...
typename get_ext_oneapi_properties< PropertyListT >::type ExpPropertyListT
typename ext::oneapi::experimental::detail::properties_t< alignment_key::value_t< Alignment > > AlignmentPropList
ext::oneapi::experimental::detail::merged_properties_t< ExpPropertyListT, AlignmentPropList > type
Simply returns 'PropertyListT' as it already has the alignment property.
add_alignment_property_t< remove_alignment_property_t< PropertyListT >, Alignment > type
This helper returns the ext::oneapi::experimental::properties class for ext::oneapi::experimental::pr...