This is a base class for all ESIMD simd classes with real storage (simd, simd_mask_impl). More...
#include <sycl/ext/intel/esimd/detail/simd_obj_impl.hpp>
Public Types | |
using | element_type = get_vector_element_type< Derived > |
Element type of the derived (user) class. More... | |
using | raw_vector_type = vector_type_t< RawTy, N > |
The underlying raw storage vector data type. More... | |
using | raw_element_type = RawTy |
The element type of the raw storage vector. More... | |
Public Member Functions | |
simd_obj_impl ()=default | |
Default constructor. More... | |
simd_obj_impl (const simd_obj_impl &other) | |
Copy constructor. More... | |
template<class Ty1 , typename Derived1 > | |
simd_obj_impl (const simd_obj_impl< Ty1, N, Derived1, SFINAE > &other) | |
Implicit conversion constructor from another simd_obj_impl object. More... | |
simd_obj_impl (const raw_vector_type &Val) | |
Implicit conversion constructor from a raw vector object. More... | |
simd_obj_impl (Ty Base, Ty Step) noexcept | |
Arithmetic progression constructor. More... | |
template<class T1 , class = std::enable_if_t<detail::is_valid_simd_elem_type_v<T1>>> | |
simd_obj_impl (T1 Val) noexcept | |
Broadcast constructor. More... | |
template<int N1, class = std::enable_if_t<N1 == N>> | |
simd_obj_impl (const Ty(&&Arr)[N1]) noexcept | |
Rvalue array-based constructor. More... | |
template<typename Flags , typename std::enable_if_t< is_simd_flag_type_v< Flags >, bool > = true> | |
simd_obj_impl (const Ty *ptr, Flags) noexcept | |
Pointer-based load constructor. More... | |
template<typename PropertyListT = oneapi::experimental::empty_properties_t, typename std::enable_if_t< ext::oneapi::experimental::is_property_list_v< PropertyListT >, bool > = true> | |
simd_obj_impl (const Ty *ptr, PropertyListT={}) noexcept | |
Pointer-based load constructor. More... | |
template<typename AccessorT , typename Flags , typename std::enable_if_t< detail::is_accessor_with_v< AccessorT, accessor_mode_cap::can_read > &&is_simd_flag_type_v< Flags >, bool > = true> | |
simd_obj_impl (AccessorT acc, uint32_t offset, Flags) noexcept | |
Accessor-based load constructor. More... | |
template<typename AccessorT , typename PropertyListT = oneapi::experimental::empty_properties_t, typename std::enable_if_t< detail::is_accessor_with_v< AccessorT, accessor_mode_cap::can_read > &&ext::oneapi::experimental::is_property_list_v< PropertyListT >, bool > = true> | |
simd_obj_impl (AccessorT acc, uint32_t offset, PropertyListT={}) noexcept | |
Accessor-based load constructor. More... | |
Derived & | operator= (const simd_obj_impl &other) noexcept |
Copy assignment operator. More... | |
template<typename T = simd_obj_impl, typename = std::enable_if_t<T::length == 1>> | |
operator Ty () const | |
Type conversion into a scalar: <simd_obj_impl<RawTy, 1, simd<Ty,1>> to Ty . More... | |
raw_vector_type | data () const |
raw_vector_type & | data_ref () |
Derived | read () const |
Derived & | write (const Derived &Val) |
Replaces the underlying data with the one taken from another object. More... | |
void | merge (const Derived &Val, const simd_mask_type< N > &Mask) |
"Merges" this object's value with another object: replaces part of the underlying data with the one taken from the other object according to a mask. More... | |
void | merge (const Derived &Val1, Derived Val2, const simd_mask_type< N > &Mask) |
Merges given two objects with a mask and writes resulting data into this object. More... | |
template<typename EltTy > | |
auto | bit_cast_view () & |
Create a 1-dimensional view of this object. More... | |
template<typename EltTy , int Height, int Width> | |
auto | bit_cast_view () & |
Create a 2-dimensional view of this object. More... | |
template<int Size, int Stride> | |
simd_view< Derived, region1d_t< Ty, Size, Stride > > | select (uint16_t Offset=0) & |
Select elements of this object into a subregion and create a 1D view for for it. More... | |
template<int Size, int Stride> | |
resize_a_simd_type_t< Derived, Size > | select (uint16_t Offset=0) && |
Select and extract a subregion of this object's elements and return it as a new vector object. More... | |
Ty | operator[] (int i) const |
Get value of this vector's element. More... | |
simd_view< Derived, region1d_scalar_t< Ty > > | operator[] (int i) |
Return writable view of a single element. More... | |
template<int Size> | |
resize_a_simd_type_t< Derived, Size > | iselect (const simd< uint16_t, Size > &Indices) |
Indirect select - select and extract multiple elements with given variable indices. More... | |
void | iupdate (ushort Index, Ty V) |
Update single element with variable index. More... | |
template<int Size> | |
void | iupdate (const simd< uint16_t, Size > &Indices, const resize_a_simd_type_t< Derived, Size > &Val, const simd_mask_type< Size > &Mask) |
Indirect update - update multiple elements with given variable indices. More... | |
template<int Rep> | |
resize_a_simd_type_t< Derived, Rep *N > | replicate () const |
Replicates contents of this vector a number of times into a new vector. More... | |
template<int Rep, int W> | |
resize_a_simd_type_t< Derived, Rep *W > | replicate_w (uint16_t Offset) const |
Shortcut to replicate_vs_w_hs with VS=0 and HS=1 to replicate a single "dense" (w/o gaps between elements) block Rep times. More... | |
template<int Rep, int VS, int W> | |
resize_a_simd_type_t< Derived, Rep *W > | replicate_vs_w (uint16_t Offset) const |
Shortcut to replicate_vs_w_hs with HS=1 to replicate dense blocks. More... | |
template<int Rep, int VS, int W, int HS> | |
resize_a_simd_type_t< Derived, Rep *W > | replicate_vs_w_hs (uint16_t Offset) const |
This function "replicates" a portion of this object's elements into a new object. More... | |
template<typename T1 = Ty, typename = std::enable_if_t<std::is_integral_v<T1>>> | |
uint16_t | any () const |
See if any element is non-zero. More... | |
template<typename T1 = Ty, typename = std::enable_if_t<std::is_integral_v<T1>>> | |
uint16_t | all () const |
See if all elements are non-zero. More... | |
template<typename Flags = element_aligned_tag, int ChunkSize = 32> | |
ESIMD_INLINE std::enable_if_t< is_simd_flag_type_v< Flags > > | copy_from (const Ty *addr, Flags) SYCL_ESIMD_FUNCTION |
Copy a contiguous block of data from memory into this simd_obj_impl object. More... | |
template<int ChunkSize = 32, typename PropertyListT = oneapi::experimental::empty_properties_t> | |
ESIMD_INLINE std::enable_if_t< ext::oneapi::experimental::is_property_list_v< PropertyListT > > | copy_from (const Ty *addr, PropertyListT={}) SYCL_ESIMD_FUNCTION |
Copy a contiguous block of data from memory into this simd_obj_impl object. More... | |
template<typename AccessorT , typename Flags = element_aligned_tag, int ChunkSize = 32> | |
ESIMD_INLINE std::enable_if_t< detail::is_device_accessor_with_v< AccessorT, accessor_mode_cap::can_read > &&is_simd_flag_type_v< Flags > > | copy_from (AccessorT acc, uint32_t offset, Flags) SYCL_ESIMD_FUNCTION |
Copy a contiguous block of data from memory into this simd_obj_impl object. More... | |
template<typename AccessorT , int ChunkSize = 32, typename PropertyListT = oneapi::experimental::empty_properties_t> | |
ESIMD_INLINE std::enable_if_t< detail::is_device_accessor_with_v< AccessorT, accessor_mode_cap::can_read > &&ext::oneapi::experimental::is_property_list_v< PropertyListT > > | copy_from (AccessorT acc, uint32_t offset, PropertyListT={}) SYCL_ESIMD_FUNCTION |
Copy a contiguous block of data from memory into this simd_obj_impl object. More... | |
template<typename AccessorT , typename Flags = element_aligned_tag, int ChunkSize = 32> | |
ESIMD_INLINE std::enable_if_t< detail::is_local_accessor_with_v< AccessorT, accessor_mode_cap::can_read > &&is_simd_flag_type_v< Flags >, void > | copy_from (AccessorT acc, uint32_t offset, Flags) SYCL_ESIMD_FUNCTION |
Copy a contiguous block of data from memory into this simd_obj_impl object. More... | |
template<typename AccessorT , int ChunkSize = 32, typename PropertyListT = oneapi::experimental::empty_properties_t> | |
ESIMD_INLINE std::enable_if_t< detail::is_local_accessor_with_v< AccessorT, accessor_mode_cap::can_read > &&ext::oneapi::experimental::is_property_list_v< PropertyListT >, void > | copy_from (AccessorT acc, uint32_t offset, PropertyListT={}) SYCL_ESIMD_FUNCTION |
Copy a contiguous block of data from memory into this simd_obj_impl object. More... | |
template<typename Flags , int ChunkSize = 32> | |
ESIMD_INLINE std::enable_if_t< is_simd_flag_type_v< Flags > > | copy_to (Ty *addr, Flags) const SYCL_ESIMD_FUNCTION |
Copy all vector elements of this object into a contiguous block in memory. More... | |
template<int ChunkSize = 32, typename PropertyListT = oneapi::experimental::empty_properties_t> | |
ESIMD_INLINE std::enable_if_t< ext::oneapi::experimental::is_property_list_v< PropertyListT > > | copy_to (Ty *addr, PropertyListT={}) const SYCL_ESIMD_FUNCTION |
Copy all vector elements of this object into a contiguous block in memory. More... | |
template<typename AccessorT , typename Flags , int ChunkSize = 32> | |
ESIMD_INLINE std::enable_if_t< detail::is_device_accessor_with_v< AccessorT, accessor_mode_cap::can_write > &&is_simd_flag_type_v< Flags > > | copy_to (AccessorT acc, uint32_t offset, Flags) const SYCL_ESIMD_FUNCTION |
Copy all vector elements of this object into a contiguous block in memory. More... | |
template<typename AccessorT , int ChunkSize = 32, typename PropertyListT = oneapi::experimental::empty_properties_t> | |
ESIMD_INLINE std::enable_if_t< detail::is_device_accessor_with_v< AccessorT, accessor_mode_cap::can_write > &&ext::oneapi::experimental::is_property_list_v< PropertyListT > > | copy_to (AccessorT acc, uint32_t offset, PropertyListT={}) const SYCL_ESIMD_FUNCTION |
Copy all vector elements of this object into a contiguous block in memory. More... | |
template<typename AccessorT , typename Flags , int ChunkSize = 32> | |
ESIMD_INLINE std::enable_if_t< detail::is_local_accessor_with_v< AccessorT, accessor_mode_cap::can_write > &&is_simd_flag_type_v< Flags >, void > | copy_to (AccessorT acc, uint32_t offset, Flags) const SYCL_ESIMD_FUNCTION |
Copy all vector elements of this object into a contiguous block in memory. More... | |
template<typename AccessorT , int ChunkSize = 32, typename PropertyListT = oneapi::experimental::empty_properties_t> | |
ESIMD_INLINE std::enable_if_t< detail::is_local_accessor_with_v< AccessorT, accessor_mode_cap::can_write > &&ext::oneapi::experimental::is_property_list_v< PropertyListT >, void > | copy_to (AccessorT acc, uint32_t offset, PropertyListT={}) const SYCL_ESIMD_FUNCTION |
Copy all vector elements of this object into a contiguous block in memory. More... | |
template<class T1 = Ty, class = std::enable_if_t<std::is_integral_v<T1>>> | |
Derived | operator~ () const |
Per-element bitwise inversion, available in all subclasses, but only for integral element types (simd_mask included). More... | |
template<class T1 = Ty, class = std::enable_if_t<std::is_integral_v<T1>>> | |
simd_mask_type< N > | operator! () const |
Unary logical negation operator, available in all subclasses, but only for integral element types (simd_mask included). More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator^= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Bitwise-xor compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator^= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
^= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator^= (T1 RHS) |
^= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator|= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Bitwise-or compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator|= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
|= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator|= (T1 RHS) |
|= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator&= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Bitwise-and compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator&= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
&= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator&= (T1 RHS) |
&= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator%= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Modulo operation compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator%= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
%= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< std::is_integral_v<element_type> &&std::is_integral_v<T1> >> | |
Derived & | operator%= (T1 RHS) |
%= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && std::is_integral_v<element_type> &&std::is_integral_v<T1> &&__ESIMD_DNS::is_simd_type_v<Derived> >> | |
Derived & | operator<<= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Shift left compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && std::is_integral_v<element_type> &&std::is_integral_v<T1> &&__ESIMD_DNS::is_simd_type_v<Derived> >> | |
Derived & | operator<<= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
<<= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< std::is_integral_v<element_type> &&std::is_integral_v<T1> &&__ESIMD_DNS::is_simd_type_v<Derived> >> | |
Derived & | operator<<= (T1 RHS) |
<<= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && std::is_integral_v<element_type> &&std::is_integral_v<T1> &&__ESIMD_DNS::is_simd_type_v<Derived> >> | |
Derived & | operator>>= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Logical shift right compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && std::is_integral_v<element_type> &&std::is_integral_v<T1> &&__ESIMD_DNS::is_simd_type_v<Derived> >> | |
Derived & | operator>>= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
>>= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< std::is_integral_v<element_type> &&std::is_integral_v<T1> &&__ESIMD_DNS::is_simd_type_v<Derived> >> | |
Derived & | operator>>= (T1 RHS) |
>>= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator+= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Addition operation compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator+= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
+= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator+= (T1 RHS) |
+= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator-= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Subtraction operation compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator-= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
-= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator-= (T1 RHS) |
-= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator*= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Multiplication operation compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator*= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
*= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator*= (T1 RHS) |
*= scalar version. More... | |
template<class T1 , class SimdT , class = std::enable_if_t< (is_simd_type_v<Derived> == is_simd_type_v<SimdT>) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator/= (const __ESIMD_DNS::simd_obj_impl< T1, N, SimdT > &RHS) |
Division operation compound assignment. More... | |
template<class SimdT1 , class RegionT1 , class T1 = typename RegionT1::element_type, class = std::enable_if_t<(is_simd_type_v<Derived> == is_simd_type_v<SimdT1>) && (RegionT1::length == length) && __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator/= (const sycl::ext::intel::esimd ::simd_view< SimdT1, RegionT1 > &RHS) |
/= simd_view version. More... | |
template<class T1 , class = std::enable_if_t< __ESIMD_DNS::is_simd_type_v<Derived> &&__ESIMD_DNS::is_vectorizable_v<T1> >> | |
Derived & | operator/= (T1 RHS) |
/= scalar version. More... | |
Static Public Attributes | |
static constexpr int | length = N |
The number of elements in this object. More... | |
Protected Member Functions | |
template<typename RTy , class ElemTy = __raw_t<typename RTy::element_type>> | |
ESIMD_INLINE void | writeRegion (RTy Region, const vector_type_t< ElemTy, RTy::length > &Val) |
Write a simd_obj_impl-vector into a basic region of a simd_obj_impl object. More... | |
template<typename TR , typename UR , class ElemTy = __raw_t<typename TR::element_type>> | |
ESIMD_INLINE void | writeRegion (std::pair< TR, UR > Region, const vector_type_t< ElemTy, TR::length > &Val) |
Write a simd_obj_impl-vector into a nested region of a simd_obj_impl object. More... | |
void | set (const raw_vector_type &Val) |
This is a base class for all ESIMD simd classes with real storage (simd, simd_mask_impl).
It wraps a clang vector as the storage for the elements. Additionally this class supports region operations that map to Intel GPU regions. The type of a region select or bit_cast_view operation is of simd_view type, which models a "window" into this object's storage and can used to read and modify it.
This class and its derivatives must follow the 'curiously recurring template' design pattern.
RawTy | Raw (storage) element type |
N | Number of elements |
Derived | - A class derived from this one. Pure simd_obj_impl objects are never supposed to be constructed directly neither by user nor by ESIMD library code, instead they should always be enclosed into objects of some derived class - simd or simd_mask . This derived class is captured by this template parameter. Note that for some element types, the element type in the Derived type and this type may differ - for example, half type. |
SFINAE | - defaults to 'void' in the forward declarion within types.hpp, used to disable invalid specializations. |
Definition at line 175 of file simd_obj_impl.hpp.
using sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::element_type = get_vector_element_type<Derived> |
Element type of the derived (user) class.
Definition at line 196 of file simd_obj_impl.hpp.
using sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::raw_element_type = RawTy |
The element type of the raw storage vector.
Definition at line 202 of file simd_obj_impl.hpp.
using sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::raw_vector_type = vector_type_t<RawTy, N> |
The underlying raw storage vector data type.
Definition at line 199 of file simd_obj_impl.hpp.
|
default |
Default constructor.
Values of the constructed object's elements are undefined.
Referenced by sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inline |
Copy constructor.
other | The other object to bitwise-copy elements from. |
Definition at line 249 of file simd_obj_impl.hpp.
References __esimd_dbg_print, sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inline |
Implicit conversion constructor from another simd_obj_impl
object.
Elements of the of the other object are type-converted to element_type
to obtain elements of this object.
Ty1 | Raw element type of the other object. |
Derived1 | The actual type of the other object. |
other | The other object. |
Definition at line 261 of file simd_obj_impl.hpp.
References __esimd_dbg_print, sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inline |
Implicit conversion constructor from a raw vector object.
Val | the raw vector to convert from. |
Definition at line 268 of file simd_obj_impl.hpp.
References __esimd_dbg_print, sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inlinenoexcept |
Arithmetic progression constructor.
Consecutive elements of this object are initialized with the arithmetic progression defined by the arguments. For example, simd<int, 4> x(1, 3)
will initialize x to the {1, 4, 7, 10}
sequence. If Ty is a floating-point type and Base
or Step
is +/-inf or nan, then this constructor has undefined behavior.
Base | The start of the progression. |
Step | The step of the progression. |
Definition at line 281 of file simd_obj_impl.hpp.
References __esimd_dbg_print, and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inlinenoexcept |
Broadcast constructor.
Given value is type-converted to the element_type
and resulting bit representation is broadcast to all lanes of the underlying vector.
T1 | Type of the value. |
Val | The value to broadcast. |
Definition at line 293 of file simd_obj_impl.hpp.
References __esimd_dbg_print, and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inlinenoexcept |
Rvalue array-based constructor.
Used for in-place initialization like simd<int, N> x({1,0,0,1,...})
.
Arr | Rvalue reference to an array of size N to initialize from. |
Definition at line 303 of file simd_obj_impl.hpp.
References __esimd_dbg_print, and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inlinenoexcept |
Pointer-based load constructor.
Initializes this object from values stored in memory. For example: simd<int, N> x(ptr, overaligned_tag<16>{});
.
Flags | Specifies memory address alignment. Affects efficiency of the generated code. |
ptr | The memory address to read from. |
Definition at line 322 of file simd_obj_impl.hpp.
References __esimd_dbg_print, sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inlinenoexcept |
Pointer-based load constructor.
Initializes this object from values stored in memory. For example: simd<int, N> x(ptr, properties{alignment<16>});
.
PropertiesListT | Specifies compile-time properties Affects efficiency of the generated code. |
ptr | The memory address to read from. |
Definition at line 338 of file simd_obj_impl.hpp.
|
inlinenoexcept |
Accessor-based load constructor.
Initializes constructed object from values stored in memory represented by an accessor and an offset. For example: simd<int, N> x(acc, 128, overaligned_tag<16>{});
.
AccessorT | the type of the accessor. Auto-deduced. |
Flags | Specifies memory address alignment. Affects efficiency of the generated code. Auto-deduced from the unnamed alignment tag argument. |
acc | The accessor to read from. |
offset | offset in bytes of the first element. |
Definition at line 361 of file simd_obj_impl.hpp.
References __esimd_dbg_print, sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
|
inlinenoexcept |
Accessor-based load constructor.
Initializes constructed object from values stored in memory represented by an accessor and an offset. For example: simd<int, N> x(acc, 128, properties{alignment<16>});
.
AccessorT | the type of the accessor. Auto-deduced. |
PropertiesListT | Specifies compile-times-properties. Affects efficiency of the generated code. Auto-deduced from the unnamed properties argument. |
acc | The accessor to read from. |
offset | offset in bytes of the first element. |
Definition at line 396 of file simd_obj_impl.hpp.
|
inline |
See if all elements are non-zero.
Definition at line 693 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
See if any element is non-zero.
Definition at line 684 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
Create a 1-dimensional view of this object.
EltTy | The element type of the new view. |
simd_view
object which spans this entire object, but potentially with a different element type and different number of elements, if the sizes of this object's element type and the new one don't match. Definition at line 486 of file simd_obj_impl.hpp.
|
inline |
Create a 2-dimensional view of this object.
sizeof(EltTy)*Height*Width
must be equal to the byte size of this object.
ElTy | Element type of the view. |
Height | Height of the view in rows. |
Width | Width of the view in elements. |
simd_view
object which spans this entire object, but potentially with a different element type and different number of elements, if the sizes of this object's element type and the new one don't match. Definition at line 503 of file simd_obj_impl.hpp.
ESIMD_INLINE std::enable_if_t<detail::is_device_accessor_with_v< AccessorT, accessor_mode_cap::can_read> && is_simd_flag_type_v<Flags> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from | ( | AccessorT | acc, |
uint32_t | offset, | ||
Flags | |||
) |
Copy a contiguous block of data from memory into this simd_obj_impl object.
The amount of memory copied equals the total size of vector elements in this object. Source memory location is represented via a global accessor and offset. None of the template parameters except documented ones can/should be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
Flags | Alignment control for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from (in bytes). |
ESIMD_INLINE std::enable_if_t<detail::is_local_accessor_with_v< AccessorT, accessor_mode_cap::can_read> && is_simd_flag_type_v<Flags>, void> sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from | ( | AccessorT | acc, |
uint32_t | offset, | ||
Flags | |||
) |
Copy a contiguous block of data from memory into this simd_obj_impl object.
The amount of memory copied equals the total size of vector elements in this object. Source memory location is represented via a local accessor and offset. None of the template parameters except documented ones can/should be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
Flags | Alignment control for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from (in bytes). |
ESIMD_INLINE std::enable_if_t< detail::is_device_accessor_with_v<AccessorT, accessor_mode_cap::can_read> && ext::oneapi::experimental::is_property_list_v<PropertyListT> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from | ( | AccessorT | acc, |
uint32_t | offset, | ||
PropertyListT | = {} |
||
) |
Copy a contiguous block of data from memory into this simd_obj_impl object.
The amount of memory copied equals the total size of vector elements in this object. Source memory location is represented via a global accessor and offset. None of the template parameters except documented ones can/should be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
ChunkSize | Chunk size control for the copy operation. |
PropertyListT | Compile-time property specification for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from (in bytes). |
ESIMD_INLINE std::enable_if_t< detail::is_local_accessor_with_v<AccessorT, accessor_mode_cap::can_read> && ext::oneapi::experimental::is_property_list_v<PropertyListT>, void> sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from | ( | AccessorT | acc, |
uint32_t | offset, | ||
PropertyListT | = {} |
||
) |
Copy a contiguous block of data from memory into this simd_obj_impl object.
The amount of memory copied equals the total size of vector elements in this object. Source memory location is represented via a local accessor and offset. None of the template parameters except documented ones can/should be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
ChunkSize | Chunk size control for the copy operation. |
PropertyListT | Compile-time property specification for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from (in bytes). |
ESIMD_INLINE std::enable_if_t<is_simd_flag_type_v<Flags> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from | ( | const Ty * | addr, |
Flags | |||
) |
Copy a contiguous block of data from memory into this simd_obj_impl object.
The amount of memory copied equals the total size of vector elements in this object. None of the template parameters except documented ones can/should be specified by callers.
Flags | Alignment control for the copy operation. See Alignment control. for more info. |
addr | the memory address to copy from. Must be a pointer to the global address space, otherwise behavior is undefined. |
Referenced by sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl().
ESIMD_INLINE std::enable_if_t< ext::oneapi::experimental::is_property_list_v<PropertyListT> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_from | ( | const Ty * | addr, |
PropertyListT | = {} |
||
) |
Copy a contiguous block of data from memory into this simd_obj_impl object.
The amount of memory copied equals the total size of vector elements in this object. None of the template parameters except documented ones can/should be specified by callers.
ChunkSize | Chunk size control for the copy operation. |
PropertyListT | Compile-time property specification for the copy operation. See Alignment control. for more info. |
addr | the memory address to copy from. Must be a pointer to the global address space, otherwise behavior is undefined. |
ESIMD_INLINE std::enable_if_t<detail::is_device_accessor_with_v< AccessorT, accessor_mode_cap::can_write> && is_simd_flag_type_v<Flags> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_to | ( | AccessorT | acc, |
uint32_t | offset, | ||
Flags | |||
) | const |
Copy all vector elements of this object into a contiguous block in memory.
Destination memory location is represented via a global accessor and offset. None of the template parameters should be be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
Flags | Alignment control for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from. |
ESIMD_INLINE std::enable_if_t<detail::is_local_accessor_with_v< AccessorT, accessor_mode_cap::can_write> && is_simd_flag_type_v<Flags>, void> sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_to | ( | AccessorT | acc, |
uint32_t | offset, | ||
Flags | |||
) | const |
Copy all vector elements of this object into a contiguous block in memory.
Destination memory location is represented via a local accessor and offset. None of the template parameters should be be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
Flags | Alignment control for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from. |
ESIMD_INLINE std::enable_if_t< detail::is_device_accessor_with_v<AccessorT, accessor_mode_cap::can_write> && ext::oneapi::experimental::is_property_list_v<PropertyListT> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_to | ( | AccessorT | acc, |
uint32_t | offset, | ||
PropertyListT | = {} |
||
) | const |
Copy all vector elements of this object into a contiguous block in memory.
Destination memory location is represented via a global accessor and offset. None of the template parameters should be be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
PropertyListT | Compile-time property specification for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from. |
ESIMD_INLINE std::enable_if_t< detail::is_local_accessor_with_v<AccessorT, accessor_mode_cap::can_write> && ext::oneapi::experimental::is_property_list_v<PropertyListT>, void> sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_to | ( | AccessorT | acc, |
uint32_t | offset, | ||
PropertyListT | = {} |
||
) | const |
Copy all vector elements of this object into a contiguous block in memory.
Destination memory location is represented via a local accessor and offset. None of the template parameters should be be specified by callers.
AccessorT | Type of the accessor (auto-deduced). |
PropertyListT | Compile-time property specification for the copy operation. See Alignment control. for more info. |
acc | accessor to copy from. |
offset | offset to copy from. |
ESIMD_INLINE std::enable_if_t<is_simd_flag_type_v<Flags> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_to | ( | Ty * | addr, |
Flags | |||
) | const |
Copy all vector elements of this object into a contiguous block in memory.
None of the template parameters should be be specified by callers.
Flags | Alignment control for the copy operation. See Alignment control. for more info. |
addr | the memory address to copy to. Must be a pointer to the global address space, otherwise behavior is undefined. |
ESIMD_INLINE std::enable_if_t< ext::oneapi::experimental::is_property_list_v<PropertyListT> > sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::copy_to | ( | Ty * | addr, |
PropertyListT | = {} |
||
) | const |
Copy all vector elements of this object into a contiguous block in memory.
None of the template parameters should be be specified by callers.
PropertyListT | Compile-time property specification for the copy operation. See Alignment control. for more info. |
addr | the memory address to copy to. Must be a pointer to the global address space, otherwise behavior is undefined. |
|
inline |
Definition at line 431 of file simd_obj_impl.hpp.
References __esimd_dbg_print.
Referenced by sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::all(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::any(), sycl::_V1::ext::intel::esimd::detail::atomic_update_impl(), sycl::_V1::ext::intel::esimd::ballot(), sycl::_V1::ext::intel::esimd::detail::block_load_impl(), sycl::_V1::ext::intel::esimd::block_store(), sycl::_V1::ext::intel::esimd::detail::block_store_impl(), sycl::_V1::ext::intel::esimd::cbit(), sycl::_V1::ext::intel::esimd::convert(), sycl::_V1::ext::intel::esimd::fbh(), sycl::_V1::ext::intel::esimd::fbl(), sycl::_V1::ext::intel::esimd::detail::gather_impl(), sycl::_V1::ext::intel::esimd::gather_rgba(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::iselect(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::iupdate(), sycl::_V1::ext::intel::experimental::esimd::lsc_load_2d(), sycl::_V1::ext::intel::experimental::esimd::lsc_prefetch_2d(), sycl::_V1::ext::intel::experimental::esimd::lsc_store_2d(), sycl::_V1::ext::intel::esimd::media_block_store(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::merge(), sycl::_V1::ext::intel::esimd::simd< Ty, N >::operator sycl::ext::oneapi::experimental::simd< Ty, N1 >(), sycl::_V1::ext::intel::esimd::simd< Ty, N >::operator To(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::operator Ty(), sycl::_V1::ext::intel::esimd::simd< Ty, N >::operator++(), sycl::_V1::ext::intel::esimd::simd< Ty, N >::operator--(), sycl::_V1::ext::intel::esimd::detail::simd_view_impl< BaseTy, RegionTy >::operator=(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::operator[](), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::operator~(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::read(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::replicate_vs_w_hs(), sycl::_V1::ext::intel::esimd::saturate(), sycl::_V1::ext::intel::esimd::detail::scatter_impl(), sycl::_V1::ext::intel::esimd::scatter_rgba(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl(), sycl::_V1::ext::intel::esimd::slm_atomic_update(), sycl::_V1::ext::intel::esimd::detail::slm_atomic_update_impl(), sycl::_V1::ext::intel::esimd::slm_block_store(), sycl::_V1::ext::intel::esimd::slm_gather_rgba(), sycl::_V1::ext::intel::esimd::slm_scatter_rgba(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::writeRegion().
|
inline |
Definition at line 443 of file simd_obj_impl.hpp.
|
inline |
Indirect select - select and extract multiple elements with given variable indices.
Size | The number of elements to select. |
Indices | Indices of element to select. |
Definition at line 562 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
Indirect update - update multiple elements with given variable indices.
Size | The number of elements to update. |
Indices | Indices of element to update. |
Val | New values. |
Mask | Operation mask. 1 - update, 0 - not. |
Definition at line 582 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
|
inline |
Update single element with variable index.
Index | Element index. |
V | New value. |
Definition at line 570 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
|
inline |
"Merges" this object's value with another object: replaces part of the underlying data with the one taken from the other object according to a mask.
Only elements in lanes where corresponding mask's value is non-zero are replaced.
Val | The object to take new values from. |
Mask | The mask. |
Definition at line 462 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
|
inline |
Merges given two objects with a mask and writes resulting data into this object.
Val1 | The first object, provides elements for lanes with non-zero corresponding predicates. |
Val2 | The second object, provides elements for lanes with zero corresponding predicates. |
Mask | The merge mask. |
Definition at line 475 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
|
inline |
Type conversion into a scalar: <simd_obj_impl<RawTy, 1, simd<Ty,1>>
to Ty
.
Definition at line 425 of file simd_obj_impl.hpp.
References __esimd_dbg_print, and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
Unary logical negation operator, available in all subclasses, but only for integral element types (simd_mask
included).
Similarly to C++, where !x returns bool, !simd returns a simd_mask, where each element is a result of comparision with zero.
simd_mask
instance where each element is a result of comparison of the original element with zero. Definition at line 1029 of file simd_obj_impl.hpp.
|
inline |
Modulo operation compound assignment.
Available only when elements of both this object and the argument are integral. %=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1098 of file simd_obj_impl.hpp.
|
inline |
%=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1098 of file simd_obj_impl.hpp.
|
inline |
%=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1098 of file simd_obj_impl.hpp.
|
inline |
Bitwise-and
compound assignment.
Available only when elements of both this object and the argument are integral. &=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1095 of file simd_obj_impl.hpp.
|
inline |
&=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1095 of file simd_obj_impl.hpp.
|
inline |
&=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1095 of file simd_obj_impl.hpp.
|
inline |
Multiplication operation compound assignment.
*=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1127 of file simd_obj_impl.hpp.
|
inline |
*=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1127 of file simd_obj_impl.hpp.
|
inline |
*=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1127 of file simd_obj_impl.hpp.
|
inline |
Addition operation compound assignment.
+=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1123 of file simd_obj_impl.hpp.
|
inline |
+=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1123 of file simd_obj_impl.hpp.
|
inline |
+=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1123 of file simd_obj_impl.hpp.
|
inline |
Subtraction operation compound assignment.
-=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1125 of file simd_obj_impl.hpp.
|
inline |
-=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1125 of file simd_obj_impl.hpp.
|
inline |
-=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1125 of file simd_obj_impl.hpp.
|
inline |
Division operation compound assignment.
/=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1129 of file simd_obj_impl.hpp.
|
inline |
/=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1129 of file simd_obj_impl.hpp.
|
inline |
/=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1129 of file simd_obj_impl.hpp.
|
inline |
Shift left compound assignment.
Available only when elements of both this object and the source are integral. Not available for simd_mask
. <<=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1109 of file simd_obj_impl.hpp.
|
inline |
<<=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1109 of file simd_obj_impl.hpp.
|
inline |
<<=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1109 of file simd_obj_impl.hpp.
|
inlinenoexcept |
Copy assignment operator.
Definition at line 416 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
Referenced by sycl::_V1::ext::intel::esimd::simd< Ty, N >::operator=().
|
inline |
Logical shift right compound assignment.
Available only when elements of both this object and the source are integral. Not available for simd_mask
. >>=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1113 of file simd_obj_impl.hpp.
|
inline |
>>=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1113 of file simd_obj_impl.hpp.
|
inline |
>>=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1113 of file simd_obj_impl.hpp.
|
inline |
Return writable view of a single element.
i | Element index. |
Definition at line 550 of file simd_obj_impl.hpp.
|
inline |
Get value of this vector's element.
i | Element index. |
Definition at line 545 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
Bitwise-xor
compound assignment.
Available only when elements of both this object and the argument are integral. ^=
simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1089 of file simd_obj_impl.hpp.
|
inline |
^=
simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1089 of file simd_obj_impl.hpp.
|
inline |
^=
scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1089 of file simd_obj_impl.hpp.
|
inline |
Bitwise-or
compound assignment.
Available only when elements of both this object and the argument are integral. |= simd version.
T1 | Element type of the argument object (auto-deduced). |
SimdT | The argument object type(auto-deduced). |
RHS | The argument object. |
Definition at line 1092 of file simd_obj_impl.hpp.
|
inline |
|= simd_view version.
SimdT1 | The type of the object "viewed" by the argument (auto-deduced). |
RegionT1 | Region type of the argument object (auto-deduced). |
RHS | The argument object. |
Definition at line 1092 of file simd_obj_impl.hpp.
|
inline |
|= scalar version.
T1 | The type of the scalar argument (auto-deduced). |
RHS | The argument. |
Definition at line 1092 of file simd_obj_impl.hpp.
|
inline |
Per-element bitwise inversion, available in all subclasses, but only for integral element types (simd_mask
included).
Definition at line 1017 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
Definition at line 447 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
Referenced by sycl::_V1::ext::intel::esimd::detail::reduce_pair().
|
inline |
Replicates contents of this vector a number of times into a new vector.
Rep | The number of times this vector has to be replicated. |
Definition at line 593 of file simd_obj_impl.hpp.
|
inline |
Shortcut to replicate_vs_w_hs
with HS=1
to replicate dense blocks.
Rep | Number of blocks to select for replication. |
VS | Vertical stride - distance between first elements of consecutive blocks. If VS=0 , then the same block will be replicated Rep times in the result. |
W | Width - number of elements in a block. |
Offset | The offset of the first element of the first block. |
Rep*W
consisting of replicated elements of this
object. Definition at line 619 of file simd_obj_impl.hpp.
|
inline |
This function "replicates" a portion of this object's elements into a new object.
The source elements to replicate are Rep
number of blocks each of size W
elements. Starting elements of consecutive blocks are VS
elements apart and i'th block starts from ith_block_start_ind = Offset + i*VS
index. Consecutive elements within a block are HS
elements apart and j'th element in the block has ith_block_start_ind + j*HS
index. Thus total of Rep*W
elements are returned. Note that depending on VS
, W
and HS
, blocks' elements may overlap and in this case the elements where the overlap happens may participate 2 or more times in the result.
Example 1. Source object has 32 elements, Rep
is 2, VS
is 17, W
is 3 and HS
is 4. Selected elements are depicted with their index (matching their values) instead of a dot:
Example 2. AOS 7x3 => SOA 3x7 conversion. Rep
is 3, VS
is 1, W
is 7 and HS
is 3.
Rep | Number of blocks to select for replication. |
VS | Vertical stride - distance between first elements of consecutive blocks. If VS=0 , then the same block will be replicated Rep times in the result. |
W | Width - number of elements in a block. |
HS | Horizontal stride - distance between consecutive elements in a block. |
Offset | The offset of the first element of the first block. |
Rep*W
consisting of replicated elements of this
object. Definition at line 673 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data().
|
inline |
Shortcut to replicate_vs_w_hs
with VS=0
and HS=1
to replicate a single "dense" (w/o gaps between elements) block Rep
times.
Rep | The number of times to replicate the block. |
W | Width - number of elements in the block. |
Offset | Offset of the block's first element. |
Rep*W
consisting of replicated elements of this
object. Definition at line 605 of file simd_obj_impl.hpp.
|
inline |
Select elements of this object into a subregion and create a 1D view for for it.
Used when this
is an lvalue.
Size | The number of elements selected for the subregion. |
Stride | A distance in elements between two consecutive elements. |
Offset | The starting element's offset. |
Definition at line 518 of file simd_obj_impl.hpp.
|
inline |
Select and extract a subregion of this object's elements and return it as a new vector object.
Used when this
is an rvalue.
Size | The number of elements selected for the subregion. |
Stride | A distance in elements between two consecutive elements. |
Offset | The starting element's offset. |
Definition at line 533 of file simd_obj_impl.hpp.
|
inlineprotected |
Definition at line 1157 of file simd_obj_impl.hpp.
Referenced by sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::iupdate(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::merge(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::operator=(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::simd_obj_impl(), sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::write(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::writeRegion().
|
inline |
Replaces the underlying data with the one taken from another object.
Definition at line 451 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
|
inlineprotected |
Write a simd_obj_impl-vector into a basic region of a simd_obj_impl object.
Definition at line 701 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), syclcompat::length(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::set().
Referenced by sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::writeRegion().
|
inlineprotected |
Write a simd_obj_impl-vector into a nested region of a simd_obj_impl object.
Definition at line 729 of file simd_obj_impl.hpp.
References sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::data(), syclcompat::length(), and sycl::_V1::ext::intel::esimd::detail::simd_obj_impl< RawTy, N, Derived, SFINAE >::writeRegion().
|
staticconstexpr |
The number of elements in this object.
Definition at line 205 of file simd_obj_impl.hpp.