dune-common 2.9.0
Loading...
Searching...
No Matches
Classes | Namespaces | Macros

SIMD abstractions for Vc. More...

#include <cstddef>
#include <type_traits>
#include <utility>
#include <dune/common/indices.hh>
#include <dune/common/simd/base.hh>
#include <dune/common/simd/defaults.hh>
#include <dune/common/simd/loop.hh>
#include <dune/common/typetraits.hh>
#include <dune/common/vc.hh>

Go to the source code of this file.

Classes

struct  Dune::Simd::VcImpl::IsMask< V, SFINAE >
 specialized to true for Vc mask types More...
 
struct  Dune::Simd::VcImpl::IsMask< Vc::Mask< T, A > >
 
struct  Dune::Simd::VcImpl::IsMask< Vc::SimdMaskArray< T, n, V, m > >
 
struct  Dune::Simd::VcImpl::IsVector< V, SFINAE >
 specialized to true for Vc vector and mask types More...
 
struct  Dune::Simd::VcImpl::IsVector< Vc::Vector< T, A > >
 
struct  Dune::Simd::VcImpl::IsVector< Vc::SimdArray< T, n, V, m > >
 
struct  Dune::Simd::VcImpl::IsVectorizable< T >
 
struct  Dune::Simd::VcImpl::IsVectorizable< double >
 
struct  Dune::Simd::VcImpl::IsVectorizable< float >
 
struct  Dune::Simd::VcImpl::IsVectorizable< std::int32_t >
 
struct  Dune::Simd::VcImpl::IsVectorizable< std::uint32_t >
 
struct  Dune::Simd::VcImpl::IsVectorizable< std::int16_t >
 
struct  Dune::Simd::VcImpl::IsVectorizable< std::uint16_t >
 
class  Dune::Simd::VcImpl::Proxy< V >
 A reference-like proxy for elements of random-access vectors. More...
 
struct  Dune::Simd::Overloads::ScalarType< V, std::enable_if_t< VcImpl::IsVector< V >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::RebindType< Simd::Scalar< V >, V, std::enable_if_t< VcImpl::IsVector< V >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::RebindType< bool, V, std::enable_if_t< VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::RebindType< Scalar< typename M::Vector >, M, std::enable_if_t< VcImpl::IsMask< M >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::RebindType< S, M, std::enable_if_t< VcImpl::IsMask< M >::value &&VcImpl::IsVectorizable< S >::value &&!std::is_same< S, Scalar< typename M::Vector > >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::RebindType< S, V, std::enable_if_t< VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value &&VcImpl::IsVectorizable< S >::value &&!std::is_same< S, Scalar< V > >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::RebindType< S, V, std::enable_if_t< VcImpl::IsVector< V >::value &&!VcImpl::IsVectorizable< S >::value &&!std::is_same< S, bool >::value &&!std::is_same< S, Scalar< V > >::value > >
 should have a member type type More...
 
struct  Dune::Simd::Overloads::LaneCount< V, std::enable_if_t< VcImpl::IsVector< V >::value > >
 should be derived from an Dune::index_constant More...
 
struct  Dune::IsNumber< Vc::SimdArray< T, N, V, Wt > >
 
struct  Dune::IsNumber< Vc::Vector< T, Abi > >
 
struct  Dune::AutonomousValueType< Simd::VcImpl::Proxy< V > >
 Specialization of AutonomousValue for Vc proxies. More...
 

Namespaces

namespace  Dune
 Dune namespace.
 
namespace  Dune::Simd
 Namespace for vectorization interface functions used by library developers.
 
namespace  Dune::Simd::VcImpl
 
namespace  Dune::Simd::Overloads
 Namespace for the overloads and specializations that make up a SIMD implementation.
 

Macros

#define DUNE_SIMD_VC_ASSIGNMENT(OP)
 
#define DUNE_SIMD_VC_BINARY(OP)
 
#define DUNE_SIMD_VC_ASSIGN(OP)
 

Functions

Specialized classes and overloaded functions
template<class V >
VcImpl::Proxy< V > Dune::Simd::Overloads::lane (ADLTag< 5, VcImpl::IsVector< V >::value >, std::size_t l, V &v)
 implements Simd::lane()
 
template<class V >
Scalar< V > Dune::Simd::Overloads::lane (ADLTag< 5, VcImpl::IsVector< V >::value >, std::size_t l, const V &v)
 implements Simd::lane()
 
template<class V , class = std::enable_if_t<!std::is_reference<V>::value>>
Scalar< V > Dune::Simd::Overloads::lane (ADLTag< 5, VcImpl::IsVector< V >::value >, std::size_t l, V &&v)
 implements Simd::lane()
 
template<class V >
Dune::Simd::Overloads::cond (ADLTag< 5, VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value >, const Mask< V > &mask, const V &ifTrue, const V &ifFalse)
 implements Simd::cond()
 
template<class V >
Dune::Simd::Overloads::cond (ADLTag< 5, VcImpl::IsMask< V >::value >, const V &mask, const V &ifTrue, const V &ifFalse)
 implements Simd::cond()
 
template<class V >
auto Dune::Simd::Overloads::max (ADLTag< 5, VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value >, const V &v1, const V &v2)
 implements binary Simd::max()
 
template<class M >
auto Dune::Simd::Overloads::max (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &m1, const M &m2)
 implements binary Simd::max()
 
template<class V >
auto Dune::Simd::Overloads::min (ADLTag< 5, VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value >, const V &v1, const V &v2)
 implements binary Simd::min()
 
template<class M >
auto Dune::Simd::Overloads::min (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &m1, const M &m2)
 implements binary Simd::min()
 
template<class M >
bool Dune::Simd::Overloads::anyTrue (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &mask)
 implements Simd::anyTrue()
 
template<class M >
bool Dune::Simd::Overloads::allTrue (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &mask)
 implements Simd::allTrue()
 
template<class M >
bool Dune::Simd::Overloads::allFalse (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &mask)
 implements Simd::allFalse()
 
template<class V >
auto Dune::Simd::Overloads::max (ADLTag< 5, VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value >, const V &v)
 implements Simd::maxValue()
 
template<class M >
bool Dune::Simd::Overloads::max (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &mask)
 implements Simd::maxValue()
 
template<class V >
auto Dune::Simd::Overloads::min (ADLTag< 5, VcImpl::IsVector< V >::value &&!VcImpl::IsMask< V >::value >, const V &v)
 implements Simd::minValue()
 
template<class M >
bool Dune::Simd::Overloads::min (ADLTag< 5, VcImpl::IsMask< M >::value >, const M &mask)
 implements Simd::minValue()
 
template<class S1 , class V2 >
auto Dune::Simd::Overloads::maskAnd (ADLTag< 5, std::is_same< Mask< S1 >, bool >::value &&VcImpl::IsVector< V2 >::value >, const S1 &s1, const V2 &v2)
 implements Simd::maskAnd()
 
template<class V1 , class S2 >
auto Dune::Simd::Overloads::maskAnd (ADLTag< 5, VcImpl::IsVector< V1 >::value &&std::is_same< Mask< S2 >, bool >::value >, const V1 &v1, const S2 &s2)
 implements Simd::maskAnd()
 
template<class S1 , class V2 >
auto Dune::Simd::Overloads::maskOr (ADLTag< 5, std::is_same< Mask< S1 >, bool >::value &&VcImpl::IsVector< V2 >::value >, const S1 &s1, const V2 &v2)
 implements Simd::maskOr()
 
template<class V1 , class S2 >
auto Dune::Simd::Overloads::maskOr (ADLTag< 5, VcImpl::IsVector< V1 >::value &&std::is_same< Mask< S2 >, bool >::value >, const V1 &v1, const S2 &s2)
 implements Simd::maskOr()
 

Detailed Description

SIMD abstractions for Vc.

Macro Definition Documentation

◆ DUNE_SIMD_VC_ASSIGN

#define DUNE_SIMD_VC_ASSIGN (   OP)
Value:
template<class T, class Abi> \
friend auto operator OP(Vc::Vector<T, Abi> &l, Proxy&& r) \
-> decltype(l OP std::declval<value_type>()) \
{ \
return l OP value_type(r); \
}

◆ DUNE_SIMD_VC_ASSIGNMENT

#define DUNE_SIMD_VC_ASSIGNMENT (   OP)
Value:
template<class T, \
class = decltype(std::declval<value_type&>() OP \
autoCopy(std::declval<T>()) )> \
Proxy operator OP(T &&o) && \
{ \
vec_[idx_] OP autoCopy(std::forward<T>(o)); \
return { idx_, vec_ }; \
}
STL namespace.

◆ DUNE_SIMD_VC_BINARY

#define DUNE_SIMD_VC_BINARY (   OP)
Value:
template<class T, class Abi> \
friend auto operator OP(const Vc::Vector<T, Abi> &l, Proxy&& r) \
-> decltype(l OP std::declval<value_type>()) \
{ \
return l OP value_type(r); \
} \
template<class T, class Abi> \
auto operator OP(const Vc::Vector<T, Abi> &r) && \
-> decltype(std::declval<value_type>() OP r) \
{ \
return value_type(*this) OP r; \
} \
template<class T, std::size_t n, class Vec, std::size_t m> \
friend auto \
operator OP(const Vc::SimdArray<T, n, Vec, m> &l, Proxy&& r) \
-> decltype(l OP std::declval<value_type>()) \
{ \
return l OP value_type(r); \
} \
template<class T, std::size_t n, class Vec, std::size_t m> \
auto operator OP(const Vc::SimdArray<T, n, Vec, m> &r) && \
-> decltype(std::declval<value_type>() OP r) \
{ \
return value_type(*this) OP r; \
}