VecCore 0.8.1
C++ Library for Portable SIMD Vectorization
Loading...
Searching...
No Matches
Interface.h
Go to the documentation of this file.
1#ifndef VECCORE_BACKEND_INTERFACE_H
2#define VECCORE_BACKEND_INTERFACE_H
3
4namespace vecCore {
5
6template <typename T>
7struct TypeTraits;
8
9template <typename T>
11
12template <typename T>
14
15template <typename T>
17
18// Iterators
19
20template <typename T>
23Scalar<T> *Begin(T &v);
24
25template <typename T>
28Scalar<T> *End(T &v);
29
30template <typename T>
33Scalar<T> const *Begin(T const &v);
34
35template <typename T>
38Scalar<T> const *End(T const &v);
39
40// Vector Size
41
42template <typename T>
45constexpr size_t VectorSize();
46
47// Get/Set
48
49template <typename T>
52Scalar<T> Get(const T &v, size_t i);
53
54template <typename T>
57void Set(T &v, size_t i, Scalar<T> const val);
58
59// Load/Store
60
61template <typename T>
64void Load(T &v, Scalar<T> const *ptr);
65
66template <typename T>
69void Store(T const &v, Scalar<T> *ptr);
70
71// Gather/Scatter
72
73template <typename T, typename S = Scalar<T>>
76T Gather(S const *ptr, Index<T> const &idx);
77
78template <typename T, typename S = Scalar<T>>
81void Scatter(T const &v, S *ptr, Index<T> const &idx);
82
83// Masking/Blending
84
85template <typename M>
88bool MaskFull(M const &mask);
89
90template <typename M>
93bool MaskEmpty(M const &mask);
94
95template <typename T>
98void MaskedAssign(T &dst, const Mask<T> &mask, const T &src);
99
100template <typename T>
103T Blend(const Mask<T> &mask, const T &src1, const T &src2);
104
107constexpr bool EarlyReturnAllowed();
108
109template <typename T>
112constexpr bool EarlyReturnMaxLength(T &, size_t);
113
114// Reduction
115
116template <typename T>
119Scalar<T> ReduceAdd(const T& v);
120
121template <typename T>
124Scalar<T> ReduceMin(const T& v);
125
126template <typename T>
129Scalar<T> ReduceMax(const T& v);
130
131} // namespace vecCore
132
133#endif
#define VECCORE_ATT_HOST_DEVICE
Definition: CUDA.h:10
#define VECCORE_FORCE_INLINE
Definition: Common.h:32
VECCORE_ATT_HOST_DEVICE bool MaskEmpty(const M &mask)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE void MaskedAssign(T &dst, const Mask< T > &mask, const T &src)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE Scalar< T > Get(const T &v, size_t i)
typename TypeTraits< T >::ScalarType Scalar
Definition: Interface.h:16
typename TypeTraits< T >::MaskType Mask
Definition: Interface.h:10
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE T Blend(const Mask< T > &mask, const T &src1, const T &src2)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE void Set(T &v, size_t i, Scalar< T > const val)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE Scalar< T > ReduceMax(const T &v)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE void Scatter(T const &v, S *ptr, Index< T > const &idx)
VECCORE_ATT_HOST_DEVICE bool MaskFull(const M &mask)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE constexpr size_t VectorSize()
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE Scalar< T > * End(T &v)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE void Load(T &v, Scalar< T > const *ptr)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE constexpr bool EarlyReturnAllowed()
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE Scalar< T > * Begin(T &v)
typename TypeTraits< T >::IndexType Index
Definition: Interface.h:13
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE T Gather(S const *ptr, Index< T > const &idx)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE constexpr bool EarlyReturnMaxLength(T &, size_t n)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE Scalar< T > ReduceMin(const T &v)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE void Store(T const &v, Scalar< T > *ptr)
VECCORE_FORCE_INLINE VECCORE_ATT_HOST_DEVICE Scalar< T > ReduceAdd(const T &v)
size_t IndexType
Definition: Scalar.h:13