Loading...
Searching...
No Matches
vc.hh File Reference
Common » Vectorization » Application Developer's Interface » SIMD Abstraction Implementation for Vc

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>
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>
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_ }; \
}
std
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; \
}