35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECNORMEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_DVECNORMEXPR_H_ 101 struct DVecNormHelper
105 using CT = RemoveReference_< CompositeType_<VT> >;
116 struct UseSIMDEnabledFlag {
117 enum :
bool { value = Power::BLAZE_TEMPLATE simdEnabled< ElementType_<VT> >() };
122 enum :
bool { value = useOptimizedKernels &&
124 If_< And< HasSIMDEnabled<Abs>, HasSIMDEnabled<Power> >
126 , And< HasLoad<Abs>, HasLoad<Power> > >::value &&
127 HasSIMDAdd< ElementType_<CT>, ElementType_<CT> >::value };
157 template<
typename VT
162 inline decltype(
auto) norm_backend( const DenseVector<VT,TF>& dv, Abs
abs, Power power, Root root,
FalseType )
164 using CT = CompositeType_<VT>;
165 using ET = ElementType_<VT>;
166 using RT = decltype(
evaluate( root( std::declval<ET>() ) ) );
168 if( (~dv).
size() == 0UL )
return RT();
172 const size_t N( tmp.size() );
174 ET
norm( power(
abs( tmp[0UL] ) ) );
177 for( ; (i+4UL) <= N; i+=4UL ) {
178 norm += power(
abs( tmp[i ] ) ) + power(
abs( tmp[i+1UL] ) ) +
179 power(
abs( tmp[i+2UL] ) ) + power(
abs( tmp[i+3UL] ) );
181 for( ; (i+2UL) <= N; i+=2UL ) {
182 norm += power(
abs( tmp[i] ) ) + power(
abs( tmp[i+1UL] ) );
185 norm += power(
abs( tmp[i] ) );
209 template<
typename VT
214 inline decltype(
auto) norm_backend( const DenseVector<VT,TF>& dv, Abs abs, Power power, Root root,
TrueType )
216 using CT = CompositeType_<VT>;
217 using ET = ElementType_<VT>;
218 using RT = decltype(
evaluate( root( std::declval<ET>() ) ) );
222 if( (~dv).
size() == 0UL )
return RT();
226 const size_t N( tmp.size() );
228 constexpr
bool remainder( !usePadding || !IsPadded<VT>::value );
230 const size_t ipos( ( remainder )?( N &
size_t(-SIMDSIZE) ):( N ) );
233 SIMDTrait_<ET> xmm1, xmm2, xmm3, xmm4;
236 for( ; (i+SIMDSIZE*3UL) < ipos; i+=SIMDSIZE*4UL ) {
237 xmm1 += power(
abs( tmp.load(i ) ) );
238 xmm2 += power(
abs( tmp.load(i+SIMDSIZE ) ) );
239 xmm3 += power(
abs( tmp.load(i+SIMDSIZE*2UL) ) );
240 xmm4 += power(
abs( tmp.load(i+SIMDSIZE*3UL) ) );
242 for( ; (i+SIMDSIZE) < ipos; i+=SIMDSIZE*2UL ) {
243 xmm1 += power(
abs( tmp.load(i ) ) );
244 xmm2 += power(
abs( tmp.load(i+SIMDSIZE) ) );
246 for( ; i<ipos; i+=SIMDSIZE ) {
247 xmm1 += power(
abs( tmp.load(i) ) );
250 ET
norm(
sum( xmm1 + xmm2 + xmm3 + xmm4 ) );
252 for( ; remainder && i<N; ++i ) {
253 norm += power(
abs( tmp[i] ) );
283 template<
typename VT
288 decltype(
auto) norm_backend( const DenseVector<VT,TF>& dv, Abs abs, Power power, Root root )
290 return norm_backend( ~dv, abs, power, root, Bool< DVecNormHelper<VT,Abs,Power>::value >() );
311 template<
typename VT
337 template<
typename VT
363 template<
typename VT
369 return norm_backend( ~dv, Abs(),
Noop(),
Noop() );
389 template<
typename VT
415 template<
typename VT
421 return norm_backend( ~dv, Abs(),
Pow3(),
Cbrt() );
441 template<
typename VT
472 template<
typename VT
514 using Norm =
typename TypeAt< Norms,
min( P-1UL, 4UL ) >::Type;
516 return Norm()( ~dv );
536 template<
typename VT
decltype(auto) sqrNorm(const DenseMatrix< MT, SO > &dm)
Computes the squared L2 norm for the given dense matrix.
Definition: DMatNormExpr.h:504
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
Header file for the Sqrt functor.
Header file for auxiliary alias declarations.
Headerfile for the generic min algorithm.
#define BLAZE_USER_ASSERT(expr, msg)
Run time assertion macro for user checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_USER_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERT flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:117
Generic wrapper for the cbrt() function.
Definition: Cbrt.h:62
Header file for the Pow4 functor.
Header file for basic type definitions.
#define BLAZE_CREATE_HAS_DATA_OR_FUNCTION_MEMBER_TYPE_TRAIT(TYPE_TRAIT_NAME, MEMBER_NAME)
Macro for the creation of a type trait for compile time checks for member data and functions...
Definition: HasMember.h:98
decltype(auto) l3Norm(const DenseMatrix< MT, SO > &dm)
Computes the L3 norm for the given dense matrix.
Definition: DMatNormExpr.h:582
Header file for the Pow2 functor.
decltype(auto) l2Norm(const DenseMatrix< MT, SO > &dm)
Computes the L2 norm for the given dense matrix.
Definition: DMatNormExpr.h:556
Header file for the FalseType type/value trait base class.
decltype(auto) l4Norm(const DenseMatrix< MT, SO > &dm)
Computes the L4 norm for the given dense matrix.
Definition: DMatNormExpr.h:608
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:265
Header file for the And class template.
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1903
Header file for the DenseVector base class.
Generic wrapper for the pow() function with fixed exponent.
Definition: Forward.h:119
decltype(auto) lpNorm(const DenseMatrix< MT, SO > &dm, ST p)
Computes the Lp norm for the given dense matrix.
Definition: DMatNormExpr.h:640
Header file for the invert shim.
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:291
Generic wrapper for the qdrt() function.
Definition: Qdrt.h:61
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
System settings for performance optimizations.
#define BLAZE_STATIC_ASSERT_MSG(expr, msg)
Compile time assertion macro.In case of an invalid compile time expression, a compilation error is cr...
Definition: StaticAssert.h:123
const MT::ResultType evaluate(const Matrix< MT, SO > &matrix)
Evaluates the given matrix expression.
Definition: Matrix.h:888
const ElementType_< MT > max(const DenseMatrix< MT, SO > &dm)
Returns the largest element of the dense matrix.
Definition: DenseMatrix.h:1950
Header file for the Cbrt functor.
Header file for the LpNorm functor.
bool isZero(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 0.
Definition: DiagonalProxy.h:670
Generic wrapper for the sqrt() function.
Definition: Sqrt.h:62
Header file for the multiplication trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the L4Norm functor.
Header file for nested template disabiguation.
Header file for the If class template.
Header file for the UnderlyingBuiltin type trait.
decltype(auto) l1Norm(const DenseMatrix< MT, SO > &dm)
Computes the L1 norm for the given dense matrix.
Definition: DMatNormExpr.h:530
Header file for the HasSIMDAdd type trait.
Header file for the isZero shim.
decltype(auto) inv(const DenseMatrix< MT, SO > &dm)
Calculation of the inverse of the given dense matrix.
Definition: DMatInvExpr.h:423
Header file for all SIMD functionality.
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:76
Header file for the L2Norm functor.
Implementation of a type list.The TypeList class template represents a list of data types of arbitrar...
Definition: TypeList.h:119
Generic wrapper for the null function.
Definition: Noop.h:59
Header file for the Abs functor.
Header file for the IsPadded type trait.
decltype(auto) abs(const DenseMatrix< MT, SO > &dm)
Applies the abs() function to each single element of the dense matrix dm.
Definition: DMatMapExpr.h:1176
decltype(auto) maxNorm(const DenseMatrix< MT, SO > &dm)
Computes the maximum norm for the given dense matrix.
Definition: DMatNormExpr.h:703
Generic wrapper for the pow4() function.
Definition: Pow4.h:61
Header file for the evaluate shim.
Generic wrapper for the pow2() function.
Definition: Pow2.h:61
BLAZE_ALWAYS_INLINE ValueType_< T > sum(const SIMDi8< T > &a) noexcept
Returns the sum of all elements in the 8-bit integral SIMD vector.
Definition: Reduction.h:65
Header file for run time assertion macros.
Indexing a type list.The TypeAt class can be used to access a type list at a specified position to qu...
Definition: TypeAt.h:76
Header file for the Unique class template.
Header file for the UnaryPow functor.
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:94
Header file for the HasMember type traits.
Header file for the Noop functor.
Header file for the RemoveReference type trait.
decltype(auto) norm(const DenseMatrix< MT, SO > &dm)
Computes the L2 norm for the given dense matrix.
Definition: DMatNormExpr.h:478
Generic wrapper for the pow3() function.
Definition: Pow3.h:61
Header file for the L3Norm functor.
Header file for the L1Norm functor.
Header file for the Qdrt functor.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
Header file for the Bool class template.
Header file for the Pow3 functor.
Header file for the TrueType type/value trait base class.
Header file for the function trace functionality.