A simple SIMD type relying on implicit vectorization, i.e. done by the compiler, explicitly vectorized specializations are defined after.
More...
#include <vectorization.hpp>
|
| enum | : size_t { Size = N
} |
| |
| enum | : size_t { Align = Size * alignof(Scalar)
} |
| |
| using | Scalar = Scalar_t |
| |
|
| Scalar & | operator[] (size_t k) |
| |
| const Scalar & | operator[] (size_t k) const |
| |
| | Array ()=default |
| |
| | Array (Scalar x) |
| |
| | Array (std::initializer_list< Scalar > vals) |
| |
| | Array (Scalar x0, Scalar dx) |
| |
| | Array (const Scalar *ptr) |
| |
| template<class T > |
| | Array (const Scalar *beg, const T &off) |
| |
| Scalar | sum () const |
| |
| Scalar | dot (const Array &other) const |
| |
| template<class U > |
| | Array (const CVecExpr< U, Scalar > &expr) |
| | Copy construct from expression.
|
| |
| void | bcast (Scalar x) |
| |
| void | load (const Scalar *ptr) |
| |
| void | loada (const Scalar *ptr) |
| |
| void | store (Scalar *ptr) const |
| |
| void | storea (Scalar *ptr) const |
| |
| void | stream (Scalar *ptr) const |
| |
| template<class T > |
| void | gather (const Scalar *begin, const T &offsets) |
| |
| Array & | operator= (Scalar x) |
| |
| template<class U > |
| Array & | operator= (const CVecExpr< U, Scalar > &expr) |
| |
| Array & | operator+= (Scalar x) |
| |
| template<class U > |
| Array & | operator+= (const CVecExpr< U, Scalar > &expr) |
| |
| Array & | operator-= (Scalar x) |
| |
| template<class U > |
| Array & | operator-= (const CVecExpr< U, Scalar > &expr) |
| |
| Array & | operator*= (Scalar x) |
| |
| template<class U > |
| Array & | operator*= (const CVecExpr< U, Scalar > &expr) |
| |
| Array & | operator/= (Scalar x) |
| |
| template<class U > |
| Array & | operator/= (const CVecExpr< U, Scalar > &expr) |
| |
| const Derived & | derived () const |
| | Cast the expression to Derived, usually to allow evaluation via operator[].
|
| |
template<class Scalar_t, size_t N = preferredLen<Scalar_t>()>
class simd::Array< Scalar_t, N >
A simple SIMD type relying on implicit vectorization, i.e. done by the compiler, explicitly vectorized specializations are defined after.
- Note
- This class gets its math operator overloads from CVecExpr, the specializations do not use expression templates, IF YOU NEED A NEW FUNCTION, define it both in vector_expressions.hpp and in special_vectorization.hpp.
◆ Scalar
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ anonymous enum
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ anonymous enum
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ Array() [1/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ Array() [2/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ Array() [3/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ Array() [4/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ Array() [5/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ Array() [6/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class T >
◆ Array() [7/7]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
Copy construct from expression.
◆ bcast()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ dot()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ gather()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class T >
◆ load()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ loada()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator*=() [1/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
◆ operator*=() [2/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator+=() [1/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
◆ operator+=() [2/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator-=() [1/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
◆ operator-=() [2/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator/=() [1/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
◆ operator/=() [2/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator=() [1/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
◆ operator=() [2/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator[]() [1/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ operator[]() [2/2]
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ store()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ storea()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ stream()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ sum()
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
◆ StoreAsRef
template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
| constexpr bool simd::Array< Scalar_t, N >::StoreAsRef = true |
|
staticconstexpr |
The documentation for this class was generated from the following file: