On Mittwoch, 22. Mai 2019 11:27:25 CEST Martin Reinecke wrote:
> Still, I would need a way to determine how long the vectors actually
> are. But it would probably be enough to measure this at runtime then.
FWIW, something that took me way too long to figure out: You can use vector
builtins very conveniently in C++ with the traits I define at https://
github.com/VcDevel/std-simd/blob/59e6348a9d34b4ef4f5ef1fc4f423dd75e1987f3/
experimental/bits/simd.h#L925 (ignore _SimdWrapper: I'm working on phasing it
out after I discovered the _VectorTraits solution). You'll need __vector_type,
__is_vector_type and _VectorTraits and then you can write:
template <typename T, typename VT = VectorTraits<T>>
void f(T x) {
using element_type = typename VT::value_type;
constexpr auto N = VT::_S_width;
...
}
f(x) only participates in overload resolution if x is a vector builtin type
because otherwise VectorTraits<T> leads to a substitution failure (SFINAE).
--
──────────────────────────────────────────────────────────────────────────
Dr. Matthias Kretz https://kretzfamily.de
GSI Helmholtzzentrum für Schwerionenforschung https://gsi.de
SIMD easy and portable https://github.com/VcDevel/Vc
──────────────────────────────────────────────────────────────────────────