19template <
class T,
class simd =
void>
25template <
class T,
class simd>
49 using norms<T>::operator();
56 return {.amax = max(at, accum.
amax), .asum = at + accum.
asum, .sumsq = t * t + accum.
sumsq};
67 using batmat::datapar::hmax;
68 return {hmax(accum.
amax), reduce(accum.
asum), reduce(accum.
sumsq)};
102 return {.amax = max(at, accum.
amax), .asum = at + accum.
asum, .sumsq = t * t + accum.
sumsq};
auto select(auto cond, auto t, auto f)
simd norm_inf() const
max-norm.
simd norm_1() const
ℓ₁ norm.
simd norm_2() const
ℓ₂ norm.
T norm_inf() const
max-norm.
T amax
Maximum absolute value (ignoring NaNs).
static result zero()
Identity element for the reduction.
result operator()(result accum, result t) const
Combine two accumulators.
result operator()(result accum, T t) const
Update the accumulator with a new value.
Utilities for computing vector norms.
result operator()(result_simd accum) const
Reduce the SIMD accumulator to a scalar result.
result_simd operator()(result_simd accum, simd t) const
Update the accumulator with a new value.
static result_simd zero_simd()
result_simd operator()(result_simd a, result_simd b) const
Combine two accumulators.
typename norms< T >::result result
Accumulator.