Dune Core Modules (unstable)
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. | |
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 > | |
V | cond (M &&mask, const V &ifTrue, const V &ifFalse) |
Like the ?: operator. More... | |
template<class V > | |
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
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
.