Loading...
Searching...
No Matches
Dune::Simd Namespace Reference
Common » Vectorization » Library Developer's Interface

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

## Namespaces

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

## Classes

struct | EndMark
| final element marker for RebindList More...
class | UnitTest

## Typedefs

template<class... Types>
using | RebindList
| A list of types with the final element removed.
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
template<class V>
auto | io (const V &v)
| construct a stream inserter

## Basic interface

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

## 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.
template<class V>
std::size_t | lanes (const V &)
| Number of lanes in a SIMD type.

## Detailed Description

Namespace for vectorization interface functions used by library developers.

## Typedef Documentation

## IsLoop

template<class T>

using Dune::Simd::IsLoop = typename Impl::IsLoop<T>::type

check whether a type is an instance of LoopSIMD

## RebindList

template<class... Types>

using Dune::Simd::RebindList

Initial value:
typename Impl::RemoveEnd<EndMark, TypeList<Types...> >::type
Dune::TypeList
std::tuple< MetaType< T >... > TypeList
A simple type list.
Definition typelist.hh:87
Dune::Simd::EndMark
final element marker for RebindList
Definition test.hh:145
Dune::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.