19template <
class T,
class simd =
void>
25template <
class T,
class simd>
36 using norms<T>::operator();
43 return {.amax = max(at, accum.
amax), .asum = at + accum.
asum, .sumsq = t * t + accum.
sumsq};
48 using batmat::datapar::hmax;
49 return {hmax(accum.
amax), reduce(accum.
asum), reduce(accum.
sumsq)};
82 return {.amax = max(at, accum.
amax), .asum = at + accum.
asum, .sumsq = t * t + accum.
sumsq};
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()
typename norms< T >::result result
Accumulator.