Documentation 6b54b78464
Loading...
Searching...
No Matches
simd::Array< Scalar_t, N > Class Template Reference

A simple SIMD type relying on implicit vectorization, i.e. done by the compiler, explicitly vectorized specializations are defined after. More...

#include <vectorization.hpp>

Inheritance diagram for simd::Array< Scalar_t, N >:
[legend]

Public Types

enum  : size_t { Size = N }
 
enum  : size_t { Align = Size * alignof(Scalar) }
 
using Scalar = Scalar_t
 

Public Member Functions

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)
 
- Public Member Functions inherited from VecExpr::CVecExpr< Derived, Scalar >
const Derived & derived () const
 Cast the expression to Derived, usually to allow evaluation via operator[].
 

Static Public Attributes

static constexpr bool StoreAsRef = true
 

Detailed Description

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.

Member Typedef Documentation

◆ Scalar

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
using simd::Array< Scalar_t, N >::Scalar = Scalar_t

Member Enumeration Documentation

◆ anonymous enum

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
anonymous enum : size_t
Enumerator
Size 

◆ anonymous enum

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
anonymous enum : size_t
Enumerator
Align 

Constructor & Destructor Documentation

◆ Array() [1/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
simd::Array< Scalar_t, N >::Array ( )
inlinedefault

— Constructors —

◆ Array() [2/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
simd::Array< Scalar_t, N >::Array ( Scalar  x)
inline

◆ Array() [3/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
simd::Array< Scalar_t, N >::Array ( std::initializer_list< Scalar >  vals)
inline

◆ Array() [4/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
simd::Array< Scalar_t, N >::Array ( Scalar  x0,
Scalar  dx 
)
inline

◆ Array() [5/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
simd::Array< Scalar_t, N >::Array ( const Scalar *  ptr)
inline

◆ Array() [6/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class T >
simd::Array< Scalar_t, N >::Array ( const Scalar *  beg,
const T &  off 
)
inline

◆ Array() [7/7]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
simd::Array< Scalar_t, N >::Array ( const CVecExpr< U, Scalar > &  expr)
inline

Copy construct from expression.

Member Function Documentation

◆ bcast()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
void simd::Array< Scalar_t, N >::bcast ( Scalar  x)
inline

◆ dot()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Scalar simd::Array< Scalar_t, N >::dot ( const Array< Scalar_t, N > &  other) const
inline

◆ gather()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class T >
void simd::Array< Scalar_t, N >::gather ( const Scalar *  begin,
const T &  offsets 
)
inline

◆ load()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
void simd::Array< Scalar_t, N >::load ( const Scalar *  ptr)
inline

◆ loada()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
void simd::Array< Scalar_t, N >::loada ( const Scalar *  ptr)
inline

◆ operator*=() [1/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
Array & simd::Array< Scalar_t, N >::operator*= ( const CVecExpr< U, Scalar > &  expr)
inline

◆ operator*=() [2/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Array & simd::Array< Scalar_t, N >::operator*= ( Scalar  x)
inline

◆ operator+=() [1/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
Array & simd::Array< Scalar_t, N >::operator+= ( const CVecExpr< U, Scalar > &  expr)
inline

◆ operator+=() [2/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Array & simd::Array< Scalar_t, N >::operator+= ( Scalar  x)
inline

◆ operator-=() [1/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
Array & simd::Array< Scalar_t, N >::operator-= ( const CVecExpr< U, Scalar > &  expr)
inline

◆ operator-=() [2/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Array & simd::Array< Scalar_t, N >::operator-= ( Scalar  x)
inline

◆ operator/=() [1/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
Array & simd::Array< Scalar_t, N >::operator/= ( const CVecExpr< U, Scalar > &  expr)
inline

◆ operator/=() [2/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Array & simd::Array< Scalar_t, N >::operator/= ( Scalar  x)
inline

◆ operator=() [1/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
template<class U >
Array & simd::Array< Scalar_t, N >::operator= ( const CVecExpr< U, Scalar > &  expr)
inline

◆ operator=() [2/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Array & simd::Array< Scalar_t, N >::operator= ( Scalar  x)
inline

◆ operator[]() [1/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Scalar & simd::Array< Scalar_t, N >::operator[] ( size_t  k)
inline

— Access elements —

◆ operator[]() [2/2]

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
const Scalar & simd::Array< Scalar_t, N >::operator[] ( size_t  k) const
inline

◆ store()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
void simd::Array< Scalar_t, N >::store ( Scalar *  ptr) const
inline

◆ storea()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
void simd::Array< Scalar_t, N >::storea ( Scalar *  ptr) const
inline

◆ stream()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
void simd::Array< Scalar_t, N >::stream ( Scalar *  ptr) const
inline

◆ sum()

template<class Scalar_t , size_t N = preferredLen<Scalar_t>()>
Scalar simd::Array< Scalar_t, N >::sum ( ) const
inline

— Reduction operations —

Member Data Documentation

◆ 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: