Dune Core Modules (unstable)

Dune::Simd Namespace Reference

Namespace for vectorization interface functions used by library developers. More...

Namespaces

 Overloads
 Namespace for the overloads and specializations that make up a SIMD implementation.
 

Classes

struct  EndMark
 final element marker for RebindList More...
 

Typedefs

template<class... Types>
using RebindList = typename Impl::RemoveEnd< EndMark, TypeList< Types... > >::type
 A list of types with the final element removed. More...
 
template<class T >
using IsLoop = typename Impl::IsLoop< T >::type
 check whether a type is an instance of LoopSIMD
 

Functions

IO interface

Templates and functions in this group provide syntactic sugar for IO. They are implemented using the functionality from SimdInterfaceBase, and are not customizable by implementations.

template<class V >
auto vio (const V &v)
 construct a stream inserter More...
 
template<class V >
auto io (const V &v)
 construct a stream inserter More...
 

Basic interface

template<class V >
using Scalar = typename Overloads::ScalarType< std::decay_t< V > >::type
 Element type of some SIMD type. More...
 
template<class S , class V >
using Rebind = typename Overloads::RebindType< std::decay_t< S >, std::decay_t< V > >::type
 Construct SIMD type with different scalar type. More...
 
template<class V >
constexpr std::size_t lanes ()
 Number of lanes in a SIMD type. More...
 
template<class V >
decltype(auto) lane (std::size_t l, V &&v)
 Extract an element of a SIMD type. More...
 
template<class V , class U >
constexpr V implCast (U &&u)
 Cast an expression from one implementation to another. More...
 
template<class V , class S >
constexpr V broadcast (S s)
 Broadcast a scalar to a vector explicitly. More...
 
template<class M , class V >
cond (M &&mask, const V &ifTrue, const V &ifFalse)
 Like the ?: operator. More...
 
template<class V >
cond (bool mask, const V &ifTrue, const V &ifFalse)
 Like the ?: operator. More...
 
template<class V >
auto max (const V &v1, const V &v2)
 The binary maximum value over two simd objects. More...
 
template<class V >
auto min (const V &v1, const V &v2)
 The binary minimum value over two simd objects. More...
 
template<class Mask >
bool anyTrue (const Mask &mask)
 Whether any entry is true More...
 
template<class Mask >
bool allTrue (const Mask &mask)
 Whether all entries are true More...
 
template<class Mask >
bool anyFalse (const Mask &mask)
 Whether any entry is false More...
 
template<class Mask >
bool allFalse (const Mask &mask)
 Whether all entries are false More...
 
template<class V >
Scalar< V > max (const V &v)
 The horizontal maximum value over all lanes. More...
 
template<class V >
Scalar< V > min (const V &v)
 The horizontal minimum value over all lanes. More...
 
template<class V >
auto mask (const V &v)
 Convert to mask, analogue of bool(s) for scalars. More...
 
template<class V1 , class V2 >
auto maskOr (const V1 &v1, const V2 &v2)
 Logic or of masks. More...
 
template<class V1 , class V2 >
auto maskAnd (const V1 &v1, const V2 &v2)
 Logic and of masks. More...
 

Syntactic Sugar

Templates and functions in this group provide syntactic sugar, they are implemented using the functionality from SimdInterfaceBase, and are not customizable by implementations.

template<class V >
using Mask = Rebind< bool, V >
 Mask type type of some SIMD type. More...
 
template<class V >
std::size_t lanes (const V &)
 Number of lanes in a SIMD type. More...
 

Detailed Description

Namespace for vectorization interface functions used by library developers.

Typedef Documentation

◆ RebindList

template<class... Types>
using Dune::Simd::RebindList = typedef typename Impl::RemoveEnd<EndMark, TypeList<Types...> >::type

A list of types with the final element removed.

This is TypeList<NoEndTypes..>, where NoEndTypes... is Types... with the final element removed. The final element in Types... is required to be EndMark.

This is useful to construct type lists in generated source files, since you don't need to avoid generating a trailing , in the list – just terminate it with EndMark.

Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Mar 27, 23:31, 2024)