@smake/eigen 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -13,50 +13,52 @@
|
|
|
13
13
|
// This file contains many lightweight helper classes used to
|
|
14
14
|
// implement and control fast level 2 and level 3 BLAS-like routines.
|
|
15
15
|
|
|
16
|
+
// IWYU pragma: private
|
|
17
|
+
#include "../InternalHeaderCheck.h"
|
|
18
|
+
|
|
16
19
|
namespace Eigen {
|
|
17
20
|
|
|
18
21
|
namespace internal {
|
|
19
22
|
|
|
20
23
|
// forward declarations
|
|
21
|
-
template<typename LhsScalar, typename RhsScalar, typename Index, typename DataMapper, int mr, int nr,
|
|
24
|
+
template <typename LhsScalar, typename RhsScalar, typename Index, typename DataMapper, int mr, int nr,
|
|
25
|
+
bool ConjugateLhs = false, bool ConjugateRhs = false>
|
|
22
26
|
struct gebp_kernel;
|
|
23
27
|
|
|
24
|
-
template<typename Scalar, typename Index, typename DataMapper, int nr, int StorageOrder, bool Conjugate = false,
|
|
28
|
+
template <typename Scalar, typename Index, typename DataMapper, int nr, int StorageOrder, bool Conjugate = false,
|
|
29
|
+
bool PanelMode = false>
|
|
25
30
|
struct gemm_pack_rhs;
|
|
26
31
|
|
|
27
|
-
template<typename Scalar, typename Index, typename DataMapper, int Pack1, int Pack2, typename Packet, int StorageOrder,
|
|
32
|
+
template <typename Scalar, typename Index, typename DataMapper, int Pack1, int Pack2, typename Packet, int StorageOrder,
|
|
33
|
+
bool Conjugate = false, bool PanelMode = false>
|
|
28
34
|
struct gemm_pack_lhs;
|
|
29
35
|
|
|
30
|
-
template<
|
|
31
|
-
|
|
32
|
-
typename LhsScalar, int LhsStorageOrder, bool ConjugateLhs,
|
|
33
|
-
typename RhsScalar, int RhsStorageOrder, bool ConjugateRhs,
|
|
34
|
-
int ResStorageOrder, int ResInnerStride>
|
|
36
|
+
template <typename Index, typename LhsScalar, int LhsStorageOrder, bool ConjugateLhs, typename RhsScalar,
|
|
37
|
+
int RhsStorageOrder, bool ConjugateRhs, int ResStorageOrder, int ResInnerStride>
|
|
35
38
|
struct general_matrix_matrix_product;
|
|
36
39
|
|
|
37
|
-
template<typename Index,
|
|
38
|
-
|
|
39
|
-
typename RhsScalar, typename RhsMapper, bool ConjugateRhs, int Version=Specialized>
|
|
40
|
+
template <typename Index, typename LhsScalar, typename LhsMapper, int LhsStorageOrder, bool ConjugateLhs,
|
|
41
|
+
typename RhsScalar, typename RhsMapper, bool ConjugateRhs, int Version = Specialized>
|
|
40
42
|
struct general_matrix_vector_product;
|
|
41
43
|
|
|
42
|
-
template<typename From,typename To>
|
|
44
|
+
template <typename From, typename To>
|
|
45
|
+
struct get_factor {
|
|
43
46
|
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE To run(const From& x) { return To(x); }
|
|
44
47
|
};
|
|
45
48
|
|
|
46
|
-
template
|
|
47
|
-
|
|
48
|
-
static EIGEN_STRONG_INLINE typename NumTraits<Scalar>::Real run(const Scalar& x) {
|
|
49
|
+
template <typename Scalar>
|
|
50
|
+
struct get_factor<Scalar, typename NumTraits<Scalar>::Real> {
|
|
51
|
+
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE typename NumTraits<Scalar>::Real run(const Scalar& x) {
|
|
52
|
+
return numext::real(x);
|
|
53
|
+
}
|
|
49
54
|
};
|
|
50
55
|
|
|
51
|
-
|
|
52
|
-
template<typename Scalar, typename Index>
|
|
56
|
+
template <typename Scalar, typename Index>
|
|
53
57
|
class BlasVectorMapper {
|
|
54
|
-
|
|
55
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasVectorMapper(Scalar
|
|
58
|
+
public:
|
|
59
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasVectorMapper(Scalar* data) : m_data(data) {}
|
|
56
60
|
|
|
57
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar operator()(Index i) const {
|
|
58
|
-
return m_data[i];
|
|
59
|
-
}
|
|
61
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar operator()(Index i) const { return m_data[i]; }
|
|
60
62
|
template <typename Packet, int AlignmentType>
|
|
61
63
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet load(Index i) const {
|
|
62
64
|
return ploadt<Packet, AlignmentType>(m_data + i);
|
|
@@ -64,82 +66,91 @@ class BlasVectorMapper {
|
|
|
64
66
|
|
|
65
67
|
template <typename Packet>
|
|
66
68
|
EIGEN_DEVICE_FUNC bool aligned(Index i) const {
|
|
67
|
-
return (
|
|
69
|
+
return (std::uintptr_t(m_data + i) % sizeof(Packet)) == 0;
|
|
68
70
|
}
|
|
69
71
|
|
|
70
|
-
|
|
72
|
+
protected:
|
|
71
73
|
Scalar* m_data;
|
|
72
74
|
};
|
|
73
75
|
|
|
74
|
-
template<typename Scalar, typename Index, int AlignmentType, int Incr=1>
|
|
76
|
+
template <typename Scalar, typename Index, int AlignmentType, int Incr = 1>
|
|
75
77
|
class BlasLinearMapper;
|
|
76
78
|
|
|
77
|
-
template<typename Scalar, typename Index, int AlignmentType>
|
|
78
|
-
class BlasLinearMapper<Scalar,Index,AlignmentType>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar *data, Index incr=1)
|
|
82
|
-
: m_data(data)
|
|
83
|
-
{
|
|
79
|
+
template <typename Scalar, typename Index, int AlignmentType>
|
|
80
|
+
class BlasLinearMapper<Scalar, Index, AlignmentType> {
|
|
81
|
+
public:
|
|
82
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar* data, Index incr = 1) : m_data(data) {
|
|
84
83
|
EIGEN_ONLY_USED_FOR_DEBUG(incr);
|
|
85
|
-
eigen_assert(incr==1);
|
|
84
|
+
eigen_assert(incr == 1);
|
|
86
85
|
}
|
|
87
86
|
|
|
88
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(
|
|
89
|
-
internal::prefetch(&operator()(i));
|
|
90
|
-
}
|
|
87
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i) const { internal::prefetch(&operator()(i)); }
|
|
91
88
|
|
|
92
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const {
|
|
93
|
-
return m_data[i];
|
|
94
|
-
}
|
|
89
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const { return m_data[i]; }
|
|
95
90
|
|
|
96
|
-
template<typename PacketType>
|
|
91
|
+
template <typename PacketType>
|
|
97
92
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i) const {
|
|
98
93
|
return ploadt<PacketType, AlignmentType>(m_data + i);
|
|
99
94
|
}
|
|
100
95
|
|
|
101
|
-
template<typename PacketType>
|
|
102
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|
96
|
+
template <typename PacketType>
|
|
97
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index n, Index offset = 0) const {
|
|
98
|
+
return ploadt_partial<PacketType, AlignmentType>(m_data + i, n, offset);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
template <typename PacketType, int AlignmentT>
|
|
102
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType load(Index i) const {
|
|
103
|
+
return ploadt<PacketType, AlignmentT>(m_data + i);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
template <typename PacketType>
|
|
107
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType& p) const {
|
|
103
108
|
pstoret<Scalar, PacketType, AlignmentType>(m_data + i, p);
|
|
104
109
|
}
|
|
105
110
|
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
template <typename PacketType>
|
|
112
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, const PacketType& p, Index n,
|
|
113
|
+
Index offset = 0) const {
|
|
114
|
+
pstoret_partial<Scalar, PacketType, AlignmentType>(m_data + i, p, n, offset);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
protected:
|
|
118
|
+
Scalar* m_data;
|
|
108
119
|
};
|
|
109
120
|
|
|
110
121
|
// Lightweight helper class to access matrix coefficients.
|
|
111
|
-
template<typename Scalar, typename Index, int StorageOrder, int AlignmentType = Unaligned, int Incr = 1>
|
|
122
|
+
template <typename Scalar, typename Index, int StorageOrder, int AlignmentType = Unaligned, int Incr = 1>
|
|
112
123
|
class blas_data_mapper;
|
|
113
124
|
|
|
114
125
|
// TMP to help PacketBlock store implementation.
|
|
115
126
|
// There's currently no known use case for PacketBlock load.
|
|
116
127
|
// The default implementation assumes ColMajor order.
|
|
117
128
|
// It always store each packet sequentially one `stride` apart.
|
|
118
|
-
template<typename Index, typename Scalar, typename Packet, int n, int idx, int StorageOrder>
|
|
119
|
-
struct PacketBlockManagement
|
|
120
|
-
{
|
|
129
|
+
template <typename Index, typename Scalar, typename Packet, int n, int idx, int StorageOrder>
|
|
130
|
+
struct PacketBlockManagement {
|
|
121
131
|
PacketBlockManagement<Index, Scalar, Packet, n, idx - 1, StorageOrder> pbm;
|
|
122
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar
|
|
132
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
|
|
133
|
+
const PacketBlock<Packet, n>& block) const {
|
|
123
134
|
pbm.store(to, stride, i, j, block);
|
|
124
|
-
pstoreu<Scalar>(to + i + (j + idx)*stride, block.packet[idx]);
|
|
135
|
+
pstoreu<Scalar>(to + i + (j + idx) * stride, block.packet[idx]);
|
|
125
136
|
}
|
|
126
137
|
};
|
|
127
138
|
|
|
128
139
|
// PacketBlockManagement specialization to take care of RowMajor order without ifs.
|
|
129
|
-
template<typename Index, typename Scalar, typename Packet, int n, int idx>
|
|
130
|
-
struct PacketBlockManagement<Index, Scalar, Packet, n, idx, RowMajor>
|
|
131
|
-
{
|
|
140
|
+
template <typename Index, typename Scalar, typename Packet, int n, int idx>
|
|
141
|
+
struct PacketBlockManagement<Index, Scalar, Packet, n, idx, RowMajor> {
|
|
132
142
|
PacketBlockManagement<Index, Scalar, Packet, n, idx - 1, RowMajor> pbm;
|
|
133
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar
|
|
143
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
|
|
144
|
+
const PacketBlock<Packet, n>& block) const {
|
|
134
145
|
pbm.store(to, stride, i, j, block);
|
|
135
|
-
pstoreu<Scalar>(to + j + (i + idx)*stride, block.packet[idx]);
|
|
146
|
+
pstoreu<Scalar>(to + j + (i + idx) * stride, block.packet[idx]);
|
|
136
147
|
}
|
|
137
148
|
};
|
|
138
149
|
|
|
139
|
-
template<typename Index, typename Scalar, typename Packet, int n, int StorageOrder>
|
|
140
|
-
struct PacketBlockManagement<Index, Scalar, Packet, n, -1, StorageOrder>
|
|
141
|
-
|
|
142
|
-
|
|
150
|
+
template <typename Index, typename Scalar, typename Packet, int n, int StorageOrder>
|
|
151
|
+
struct PacketBlockManagement<Index, Scalar, Packet, n, -1, StorageOrder> {
|
|
152
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
|
|
153
|
+
const PacketBlock<Packet, n>& block) const {
|
|
143
154
|
EIGEN_UNUSED_VARIABLE(to);
|
|
144
155
|
EIGEN_UNUSED_VARIABLE(stride);
|
|
145
156
|
EIGEN_UNUSED_VARIABLE(i);
|
|
@@ -148,10 +159,10 @@ struct PacketBlockManagement<Index, Scalar, Packet, n, -1, StorageOrder>
|
|
|
148
159
|
}
|
|
149
160
|
};
|
|
150
161
|
|
|
151
|
-
template<typename Index, typename Scalar, typename Packet, int n>
|
|
152
|
-
struct PacketBlockManagement<Index, Scalar, Packet, n, -1, RowMajor>
|
|
153
|
-
|
|
154
|
-
|
|
162
|
+
template <typename Index, typename Scalar, typename Packet, int n>
|
|
163
|
+
struct PacketBlockManagement<Index, Scalar, Packet, n, -1, RowMajor> {
|
|
164
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(Scalar* to, const Index stride, Index i, Index j,
|
|
165
|
+
const PacketBlock<Packet, n>& block) const {
|
|
155
166
|
EIGEN_UNUSED_VARIABLE(to);
|
|
156
167
|
EIGEN_UNUSED_VARIABLE(stride);
|
|
157
168
|
EIGEN_UNUSED_VARIABLE(i);
|
|
@@ -160,75 +171,93 @@ struct PacketBlockManagement<Index, Scalar, Packet, n, -1, RowMajor>
|
|
|
160
171
|
}
|
|
161
172
|
};
|
|
162
173
|
|
|
163
|
-
template<typename Scalar, typename Index, int StorageOrder, int AlignmentType>
|
|
164
|
-
class blas_data_mapper<Scalar,Index,StorageOrder,AlignmentType,1>
|
|
165
|
-
|
|
166
|
-
public:
|
|
174
|
+
template <typename Scalar, typename Index, int StorageOrder, int AlignmentType>
|
|
175
|
+
class blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, 1> {
|
|
176
|
+
public:
|
|
167
177
|
typedef BlasLinearMapper<Scalar, Index, AlignmentType> LinearMapper;
|
|
178
|
+
typedef blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType> SubMapper;
|
|
168
179
|
typedef BlasVectorMapper<Scalar, Index> VectorMapper;
|
|
169
180
|
|
|
170
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr=1)
|
|
171
|
-
|
|
172
|
-
{
|
|
181
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr = 1)
|
|
182
|
+
: m_data(data), m_stride(stride) {
|
|
173
183
|
EIGEN_ONLY_USED_FOR_DEBUG(incr);
|
|
174
|
-
eigen_assert(incr==1);
|
|
184
|
+
eigen_assert(incr == 1);
|
|
175
185
|
}
|
|
176
186
|
|
|
177
|
-
EIGEN_DEVICE_FUNC
|
|
178
|
-
|
|
179
|
-
return blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType>(&operator()(i, j), m_stride);
|
|
187
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const {
|
|
188
|
+
return SubMapper(&operator()(i, j), m_stride);
|
|
180
189
|
}
|
|
181
190
|
|
|
182
|
-
EIGEN_DEVICE_FUNC
|
|
191
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const {
|
|
183
192
|
return LinearMapper(&operator()(i, j));
|
|
184
193
|
}
|
|
185
194
|
|
|
186
|
-
EIGEN_DEVICE_FUNC
|
|
195
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE VectorMapper getVectorMapper(Index i, Index j) const {
|
|
187
196
|
return VectorMapper(&operator()(i, j));
|
|
188
197
|
}
|
|
189
198
|
|
|
199
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i, Index j) const { internal::prefetch(&operator()(i, j)); }
|
|
190
200
|
|
|
191
|
-
EIGEN_DEVICE_FUNC
|
|
192
|
-
|
|
193
|
-
return m_data[StorageOrder==RowMajor ? j + i*m_stride : i + j*m_stride];
|
|
201
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
|
|
202
|
+
return m_data[StorageOrder == RowMajor ? j + i * m_stride : i + j * m_stride];
|
|
194
203
|
}
|
|
195
204
|
|
|
196
|
-
template<typename PacketType>
|
|
205
|
+
template <typename PacketType>
|
|
197
206
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i, Index j) const {
|
|
198
207
|
return ploadt<PacketType, AlignmentType>(&operator()(i, j));
|
|
199
208
|
}
|
|
200
209
|
|
|
210
|
+
template <typename PacketType>
|
|
211
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index j, Index n,
|
|
212
|
+
Index offset = 0) const {
|
|
213
|
+
return ploadt_partial<PacketType, AlignmentType>(&operator()(i, j), n, offset);
|
|
214
|
+
}
|
|
215
|
+
|
|
201
216
|
template <typename PacketT, int AlignmentT>
|
|
202
217
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT load(Index i, Index j) const {
|
|
203
218
|
return ploadt<PacketT, AlignmentT>(&operator()(i, j));
|
|
204
219
|
}
|
|
205
220
|
|
|
206
|
-
template<typename
|
|
207
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void
|
|
221
|
+
template <typename PacketType>
|
|
222
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, Index j, const PacketType& p) const {
|
|
223
|
+
pstoret<Scalar, PacketType, AlignmentType>(&operator()(i, j), p);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
template <typename PacketType>
|
|
227
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, Index j, const PacketType& p, Index n,
|
|
228
|
+
Index offset = 0) const {
|
|
229
|
+
pstoret_partial<Scalar, PacketType, AlignmentType>(&operator()(i, j), p, n, offset);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
template <typename SubPacket>
|
|
233
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void scatterPacket(Index i, Index j, const SubPacket& p) const {
|
|
208
234
|
pscatter<Scalar, SubPacket>(&operator()(i, j), p, m_stride);
|
|
209
235
|
}
|
|
210
236
|
|
|
211
|
-
template<typename SubPacket>
|
|
237
|
+
template <typename SubPacket>
|
|
212
238
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubPacket gatherPacket(Index i, Index j) const {
|
|
213
239
|
return pgather<Scalar, SubPacket>(&operator()(i, j), m_stride);
|
|
214
240
|
}
|
|
215
241
|
|
|
216
242
|
EIGEN_DEVICE_FUNC const Index stride() const { return m_stride; }
|
|
217
|
-
EIGEN_DEVICE_FUNC const
|
|
243
|
+
EIGEN_DEVICE_FUNC const Index incr() const { return 1; }
|
|
244
|
+
EIGEN_DEVICE_FUNC constexpr const Scalar* data() const { return m_data; }
|
|
218
245
|
|
|
219
246
|
EIGEN_DEVICE_FUNC Index firstAligned(Index size) const {
|
|
220
|
-
if (
|
|
247
|
+
if (std::uintptr_t(m_data) % sizeof(Scalar)) {
|
|
221
248
|
return -1;
|
|
222
249
|
}
|
|
223
250
|
return internal::first_default_aligned(m_data, size);
|
|
224
251
|
}
|
|
225
252
|
|
|
226
|
-
template<typename SubPacket, int n>
|
|
227
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j,
|
|
228
|
-
|
|
253
|
+
template <typename SubPacket, int n>
|
|
254
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j,
|
|
255
|
+
const PacketBlock<SubPacket, n>& block) const {
|
|
256
|
+
PacketBlockManagement<Index, Scalar, SubPacket, n, n - 1, StorageOrder> pbm;
|
|
229
257
|
pbm.store(m_data, m_stride, i, j, block);
|
|
230
258
|
}
|
|
231
|
-
|
|
259
|
+
|
|
260
|
+
protected:
|
|
232
261
|
Scalar* EIGEN_RESTRICT m_data;
|
|
233
262
|
const Index m_stride;
|
|
234
263
|
};
|
|
@@ -236,302 +265,320 @@ protected:
|
|
|
236
265
|
// Implementation of non-natural increment (i.e. inner-stride != 1)
|
|
237
266
|
// The exposed API is not complete yet compared to the Incr==1 case
|
|
238
267
|
// because some features makes less sense in this case.
|
|
239
|
-
template<typename Scalar, typename Index, int AlignmentType, int Incr>
|
|
240
|
-
class BlasLinearMapper
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar *data,Index incr) : m_data(data), m_incr(incr) {}
|
|
268
|
+
template <typename Scalar, typename Index, int AlignmentType, int Incr>
|
|
269
|
+
class BlasLinearMapper {
|
|
270
|
+
public:
|
|
271
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE BlasLinearMapper(Scalar* data, Index incr) : m_data(data), m_incr(incr) {}
|
|
244
272
|
|
|
245
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(int i) const {
|
|
246
|
-
|
|
273
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(int i) const { internal::prefetch(&operator()(i)); }
|
|
274
|
+
|
|
275
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i) const { return m_data[i * m_incr.value()]; }
|
|
276
|
+
|
|
277
|
+
template <typename PacketType>
|
|
278
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i) const {
|
|
279
|
+
return pgather<Scalar, PacketType>(m_data + i * m_incr.value(), m_incr.value());
|
|
247
280
|
}
|
|
248
281
|
|
|
249
|
-
|
|
250
|
-
|
|
282
|
+
template <typename PacketType>
|
|
283
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index n, Index /*offset*/ = 0) const {
|
|
284
|
+
return pgather_partial<Scalar, PacketType>(m_data + i * m_incr.value(), m_incr.value(), n);
|
|
251
285
|
}
|
|
252
286
|
|
|
253
|
-
template<typename PacketType>
|
|
254
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE
|
|
255
|
-
|
|
287
|
+
template <typename PacketType>
|
|
288
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, const PacketType& p) const {
|
|
289
|
+
pscatter<Scalar, PacketType>(m_data + i * m_incr.value(), p, m_incr.value());
|
|
256
290
|
}
|
|
257
291
|
|
|
258
|
-
template<typename PacketType>
|
|
259
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void
|
|
260
|
-
|
|
292
|
+
template <typename PacketType>
|
|
293
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, const PacketType& p, Index n,
|
|
294
|
+
Index /*offset*/ = 0) const {
|
|
295
|
+
pscatter_partial<Scalar, PacketType>(m_data + i * m_incr.value(), p, m_incr.value(), n);
|
|
261
296
|
}
|
|
262
297
|
|
|
263
|
-
protected:
|
|
264
|
-
Scalar
|
|
265
|
-
const internal::variable_if_dynamic<Index,Incr> m_incr;
|
|
298
|
+
protected:
|
|
299
|
+
Scalar* m_data;
|
|
300
|
+
const internal::variable_if_dynamic<Index, Incr> m_incr;
|
|
266
301
|
};
|
|
267
302
|
|
|
268
|
-
template<typename Scalar, typename Index, int StorageOrder, int AlignmentType,int Incr>
|
|
269
|
-
class blas_data_mapper
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
typedef
|
|
303
|
+
template <typename Scalar, typename Index, int StorageOrder, int AlignmentType, int Incr>
|
|
304
|
+
class blas_data_mapper {
|
|
305
|
+
public:
|
|
306
|
+
typedef BlasLinearMapper<Scalar, Index, AlignmentType, Incr> LinearMapper;
|
|
307
|
+
typedef blas_data_mapper SubMapper;
|
|
273
308
|
|
|
274
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr)
|
|
309
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE blas_data_mapper(Scalar* data, Index stride, Index incr)
|
|
310
|
+
: m_data(data), m_stride(stride), m_incr(incr) {}
|
|
275
311
|
|
|
276
|
-
EIGEN_DEVICE_FUNC
|
|
277
|
-
|
|
278
|
-
return blas_data_mapper(&operator()(i, j), m_stride, m_incr.value());
|
|
312
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const {
|
|
313
|
+
return SubMapper(&operator()(i, j), m_stride, m_incr.value());
|
|
279
314
|
}
|
|
280
315
|
|
|
281
|
-
EIGEN_DEVICE_FUNC
|
|
316
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LinearMapper getLinearMapper(Index i, Index j) const {
|
|
282
317
|
return LinearMapper(&operator()(i, j), m_incr.value());
|
|
283
318
|
}
|
|
284
319
|
|
|
285
|
-
EIGEN_DEVICE_FUNC
|
|
286
|
-
|
|
287
|
-
|
|
320
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void prefetch(Index i, Index j) const { internal::prefetch(&operator()(i, j)); }
|
|
321
|
+
|
|
322
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar& operator()(Index i, Index j) const {
|
|
323
|
+
return m_data[StorageOrder == RowMajor ? j * m_incr.value() + i * m_stride : i * m_incr.value() + j * m_stride];
|
|
288
324
|
}
|
|
289
325
|
|
|
290
|
-
template<typename PacketType>
|
|
326
|
+
template <typename PacketType>
|
|
291
327
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacket(Index i, Index j) const {
|
|
292
|
-
return pgather<Scalar,PacketType>(&operator()(i, j),m_incr.value());
|
|
328
|
+
return pgather<Scalar, PacketType>(&operator()(i, j), m_incr.value());
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
template <typename PacketType>
|
|
332
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketType loadPacketPartial(Index i, Index j, Index n,
|
|
333
|
+
Index /*offset*/ = 0) const {
|
|
334
|
+
return pgather_partial<Scalar, PacketType>(&operator()(i, j), m_incr.value(), n);
|
|
293
335
|
}
|
|
294
336
|
|
|
295
337
|
template <typename PacketT, int AlignmentT>
|
|
296
338
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE PacketT load(Index i, Index j) const {
|
|
297
|
-
return pgather<Scalar,PacketT>(&operator()(i, j),m_incr.value());
|
|
339
|
+
return pgather<Scalar, PacketT>(&operator()(i, j), m_incr.value());
|
|
298
340
|
}
|
|
299
341
|
|
|
300
|
-
template<typename
|
|
301
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void
|
|
342
|
+
template <typename PacketType>
|
|
343
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacket(Index i, Index j, const PacketType& p) const {
|
|
344
|
+
pscatter<Scalar, PacketType>(&operator()(i, j), p, m_incr.value());
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
template <typename PacketType>
|
|
348
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketPartial(Index i, Index j, const PacketType& p, Index n,
|
|
349
|
+
Index /*offset*/ = 0) const {
|
|
350
|
+
pscatter_partial<Scalar, PacketType>(&operator()(i, j), p, m_incr.value(), n);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
template <typename SubPacket>
|
|
354
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void scatterPacket(Index i, Index j, const SubPacket& p) const {
|
|
302
355
|
pscatter<Scalar, SubPacket>(&operator()(i, j), p, m_stride);
|
|
303
356
|
}
|
|
304
357
|
|
|
305
|
-
template<typename SubPacket>
|
|
358
|
+
template <typename SubPacket>
|
|
306
359
|
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE SubPacket gatherPacket(Index i, Index j) const {
|
|
307
360
|
return pgather<Scalar, SubPacket>(&operator()(i, j), m_stride);
|
|
308
361
|
}
|
|
309
362
|
|
|
310
|
-
// storePacketBlock_helper defines a way to access values inside the PacketBlock, this is essentially required by the
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
{
|
|
314
|
-
storePacketBlock_helper<SubPacket,
|
|
315
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
*v = block.packet[idx][l];
|
|
321
|
-
}
|
|
363
|
+
// storePacketBlock_helper defines a way to access values inside the PacketBlock, this is essentially required by the
|
|
364
|
+
// Complex types.
|
|
365
|
+
template <typename SubPacket, typename Scalar_, int n, int idx>
|
|
366
|
+
struct storePacketBlock_helper {
|
|
367
|
+
storePacketBlock_helper<SubPacket, Scalar_, n, idx - 1> spbh;
|
|
368
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
369
|
+
const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j,
|
|
370
|
+
const PacketBlock<SubPacket, n>& block) const {
|
|
371
|
+
spbh.store(sup, i, j, block);
|
|
372
|
+
sup->template storePacket<SubPacket>(i, j + idx, block.packet[idx]);
|
|
322
373
|
}
|
|
323
374
|
};
|
|
324
375
|
|
|
325
|
-
template<typename SubPacket, int n, int idx>
|
|
326
|
-
struct storePacketBlock_helper<SubPacket, std::complex<float>, n, idx>
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
std::complex<float> *v = &sup->operator()(i+l, j+idx);
|
|
334
|
-
v->real(block.packet[idx].v[2*l+0]);
|
|
335
|
-
v->imag(block.packet[idx].v[2*l+1]);
|
|
336
|
-
}
|
|
376
|
+
template <typename SubPacket, int n, int idx>
|
|
377
|
+
struct storePacketBlock_helper<SubPacket, std::complex<float>, n, idx> {
|
|
378
|
+
storePacketBlock_helper<SubPacket, std::complex<float>, n, idx - 1> spbh;
|
|
379
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
380
|
+
const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j,
|
|
381
|
+
const PacketBlock<SubPacket, n>& block) const {
|
|
382
|
+
spbh.store(sup, i, j, block);
|
|
383
|
+
sup->template storePacket<SubPacket>(i, j + idx, block.packet[idx]);
|
|
337
384
|
}
|
|
338
385
|
};
|
|
339
386
|
|
|
340
|
-
template<typename SubPacket, int n, int idx>
|
|
341
|
-
struct storePacketBlock_helper<SubPacket, std::complex<double>, n, idx>
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
{
|
|
348
|
-
std::complex<double
|
|
349
|
-
v->real(block.packet[idx].v[2*l+0]);
|
|
350
|
-
v->imag(block.packet[idx].v[2*l+1]);
|
|
387
|
+
template <typename SubPacket, int n, int idx>
|
|
388
|
+
struct storePacketBlock_helper<SubPacket, std::complex<double>, n, idx> {
|
|
389
|
+
storePacketBlock_helper<SubPacket, std::complex<double>, n, idx - 1> spbh;
|
|
390
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
391
|
+
const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>* sup, Index i, Index j,
|
|
392
|
+
const PacketBlock<SubPacket, n>& block) const {
|
|
393
|
+
spbh.store(sup, i, j, block);
|
|
394
|
+
for (int l = 0; l < unpacket_traits<SubPacket>::size; l++) {
|
|
395
|
+
std::complex<double>* v = &sup->operator()(i + l, j + idx);
|
|
396
|
+
v->real(block.packet[idx].v[2 * l + 0]);
|
|
397
|
+
v->imag(block.packet[idx].v[2 * l + 1]);
|
|
351
398
|
}
|
|
352
399
|
}
|
|
353
400
|
};
|
|
354
401
|
|
|
355
|
-
template<typename SubPacket, typename
|
|
356
|
-
struct storePacketBlock_helper<SubPacket,
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
402
|
+
template <typename SubPacket, typename Scalar_, int n>
|
|
403
|
+
struct storePacketBlock_helper<SubPacket, Scalar_, n, -1> {
|
|
404
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
405
|
+
const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index,
|
|
406
|
+
const PacketBlock<SubPacket, n>&) const {}
|
|
360
407
|
};
|
|
361
408
|
|
|
362
|
-
template<typename SubPacket, int n>
|
|
363
|
-
struct storePacketBlock_helper<SubPacket, std::complex<float>, n, -1>
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
409
|
+
template <typename SubPacket, int n>
|
|
410
|
+
struct storePacketBlock_helper<SubPacket, std::complex<float>, n, -1> {
|
|
411
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
412
|
+
const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index,
|
|
413
|
+
const PacketBlock<SubPacket, n>&) const {}
|
|
367
414
|
};
|
|
368
415
|
|
|
369
|
-
template<typename SubPacket, int n>
|
|
370
|
-
struct storePacketBlock_helper<SubPacket, std::complex<double>, n, -1>
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
416
|
+
template <typename SubPacket, int n>
|
|
417
|
+
struct storePacketBlock_helper<SubPacket, std::complex<double>, n, -1> {
|
|
418
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void store(
|
|
419
|
+
const blas_data_mapper<Scalar, Index, StorageOrder, AlignmentType, Incr>*, Index, Index,
|
|
420
|
+
const PacketBlock<SubPacket, n>&) const {}
|
|
374
421
|
};
|
|
375
|
-
// This function stores a PacketBlock on m_data, this approach is really quite slow compare to Incr=1 and should be
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
422
|
+
// This function stores a PacketBlock on m_data, this approach is really quite slow compare to Incr=1 and should be
|
|
423
|
+
// avoided when possible.
|
|
424
|
+
template <typename SubPacket, int n>
|
|
425
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void storePacketBlock(Index i, Index j,
|
|
426
|
+
const PacketBlock<SubPacket, n>& block) const {
|
|
427
|
+
storePacketBlock_helper<SubPacket, Scalar, n, n - 1> spb;
|
|
428
|
+
spb.store(this, i, j, block);
|
|
380
429
|
}
|
|
381
|
-
|
|
430
|
+
|
|
431
|
+
EIGEN_DEVICE_FUNC const Index stride() const { return m_stride; }
|
|
432
|
+
EIGEN_DEVICE_FUNC const Index incr() const { return m_incr.value(); }
|
|
433
|
+
EIGEN_DEVICE_FUNC constexpr Scalar* data() const { return m_data; }
|
|
434
|
+
|
|
435
|
+
protected:
|
|
382
436
|
Scalar* EIGEN_RESTRICT m_data;
|
|
383
437
|
const Index m_stride;
|
|
384
|
-
const internal::variable_if_dynamic<Index,Incr> m_incr;
|
|
438
|
+
const internal::variable_if_dynamic<Index, Incr> m_incr;
|
|
385
439
|
};
|
|
386
440
|
|
|
387
441
|
// lightweight helper class to access matrix coefficients (const version)
|
|
388
|
-
template<typename Scalar, typename Index, int StorageOrder>
|
|
442
|
+
template <typename Scalar, typename Index, int StorageOrder>
|
|
389
443
|
class const_blas_data_mapper : public blas_data_mapper<const Scalar, Index, StorageOrder> {
|
|
390
|
-
|
|
391
|
-
|
|
444
|
+
public:
|
|
445
|
+
typedef const_blas_data_mapper<Scalar, Index, StorageOrder> SubMapper;
|
|
446
|
+
|
|
447
|
+
EIGEN_ALWAYS_INLINE const_blas_data_mapper(const Scalar* data, Index stride)
|
|
448
|
+
: blas_data_mapper<const Scalar, Index, StorageOrder>(data, stride) {}
|
|
392
449
|
|
|
393
|
-
EIGEN_ALWAYS_INLINE
|
|
394
|
-
return
|
|
450
|
+
EIGEN_ALWAYS_INLINE SubMapper getSubMapper(Index i, Index j) const {
|
|
451
|
+
return SubMapper(&(this->operator()(i, j)), this->m_stride);
|
|
395
452
|
}
|
|
396
453
|
};
|
|
397
454
|
|
|
398
|
-
|
|
399
455
|
/* Helper class to analyze the factors of a Product expression.
|
|
400
456
|
* In particular it allows to pop out operator-, scalar multiples,
|
|
401
457
|
* and conjugate */
|
|
402
|
-
template<typename XprType>
|
|
403
|
-
{
|
|
458
|
+
template <typename XprType>
|
|
459
|
+
struct blas_traits {
|
|
404
460
|
typedef typename traits<XprType>::Scalar Scalar;
|
|
405
461
|
typedef const XprType& ExtractType;
|
|
406
|
-
typedef XprType
|
|
462
|
+
typedef XprType ExtractType_;
|
|
407
463
|
enum {
|
|
408
464
|
IsComplex = NumTraits<Scalar>::IsComplex,
|
|
409
465
|
IsTransposed = false,
|
|
410
466
|
NeedToConjugate = false,
|
|
411
|
-
HasUsableDirectAccess =
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
467
|
+
HasUsableDirectAccess =
|
|
468
|
+
((int(XprType::Flags) & DirectAccessBit) &&
|
|
469
|
+
(bool(XprType::IsVectorAtCompileTime) || int(inner_stride_at_compile_time<XprType>::ret) == 1))
|
|
470
|
+
? 1
|
|
471
|
+
: 0,
|
|
415
472
|
HasScalarFactor = false
|
|
416
473
|
};
|
|
417
|
-
typedef
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
474
|
+
typedef std::conditional_t<bool(HasUsableDirectAccess), ExtractType, typename ExtractType_::PlainObject>
|
|
475
|
+
DirectLinearAccessType;
|
|
476
|
+
EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) { return x; }
|
|
477
|
+
EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC const Scalar extractScalarFactor(const XprType&) {
|
|
478
|
+
return Scalar(1);
|
|
479
|
+
}
|
|
423
480
|
};
|
|
424
481
|
|
|
425
482
|
// pop conjugate
|
|
426
|
-
template<typename Scalar, typename NestedXpr>
|
|
427
|
-
struct blas_traits<CwiseUnaryOp<scalar_conjugate_op<Scalar>, NestedXpr> >
|
|
428
|
-
: blas_traits<NestedXpr>
|
|
429
|
-
{
|
|
483
|
+
template <typename Scalar, typename NestedXpr>
|
|
484
|
+
struct blas_traits<CwiseUnaryOp<scalar_conjugate_op<Scalar>, NestedXpr> > : blas_traits<NestedXpr> {
|
|
430
485
|
typedef blas_traits<NestedXpr> Base;
|
|
431
486
|
typedef CwiseUnaryOp<scalar_conjugate_op<Scalar>, NestedXpr> XprType;
|
|
432
487
|
typedef typename Base::ExtractType ExtractType;
|
|
433
488
|
|
|
434
|
-
enum {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
static inline Scalar extractScalarFactor(const XprType& x) { return conj(Base::extractScalarFactor(x.nestedExpression())); }
|
|
489
|
+
enum { IsComplex = NumTraits<Scalar>::IsComplex, NeedToConjugate = Base::NeedToConjugate ? 0 : IsComplex };
|
|
490
|
+
EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
|
|
491
|
+
EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
|
|
492
|
+
return conj(Base::extractScalarFactor(x.nestedExpression()));
|
|
493
|
+
}
|
|
440
494
|
};
|
|
441
495
|
|
|
442
496
|
// pop scalar multiple
|
|
443
|
-
template<typename Scalar, typename NestedXpr, typename Plain>
|
|
444
|
-
struct blas_traits<
|
|
445
|
-
|
|
446
|
-
{
|
|
447
|
-
enum {
|
|
448
|
-
HasScalarFactor = true
|
|
449
|
-
};
|
|
497
|
+
template <typename Scalar, typename NestedXpr, typename Plain>
|
|
498
|
+
struct blas_traits<
|
|
499
|
+
CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain>, NestedXpr> >
|
|
500
|
+
: blas_traits<NestedXpr> {
|
|
501
|
+
enum { HasScalarFactor = true };
|
|
450
502
|
typedef blas_traits<NestedXpr> Base;
|
|
451
|
-
typedef CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain>, NestedXpr>
|
|
503
|
+
typedef CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain>, NestedXpr>
|
|
504
|
+
XprType;
|
|
452
505
|
typedef typename Base::ExtractType ExtractType;
|
|
453
|
-
static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) {
|
|
454
|
-
|
|
455
|
-
|
|
506
|
+
EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC ExtractType extract(const XprType& x) {
|
|
507
|
+
return Base::extract(x.rhs());
|
|
508
|
+
}
|
|
509
|
+
EIGEN_DEVICE_FUNC static inline EIGEN_DEVICE_FUNC Scalar extractScalarFactor(const XprType& x) {
|
|
510
|
+
return x.lhs().functor().m_other * Base::extractScalarFactor(x.rhs());
|
|
511
|
+
}
|
|
456
512
|
};
|
|
457
|
-
template<typename Scalar, typename NestedXpr, typename Plain>
|
|
458
|
-
struct blas_traits<
|
|
459
|
-
|
|
460
|
-
{
|
|
461
|
-
enum {
|
|
462
|
-
HasScalarFactor = true
|
|
463
|
-
};
|
|
513
|
+
template <typename Scalar, typename NestedXpr, typename Plain>
|
|
514
|
+
struct blas_traits<
|
|
515
|
+
CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain> > >
|
|
516
|
+
: blas_traits<NestedXpr> {
|
|
517
|
+
enum { HasScalarFactor = true };
|
|
464
518
|
typedef blas_traits<NestedXpr> Base;
|
|
465
|
-
typedef CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain> >
|
|
519
|
+
typedef CwiseBinaryOp<scalar_product_op<Scalar>, NestedXpr, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain> >
|
|
520
|
+
XprType;
|
|
466
521
|
typedef typename Base::ExtractType ExtractType;
|
|
467
|
-
static inline ExtractType extract(const XprType& x) { return Base::extract(x.lhs()); }
|
|
468
|
-
static inline Scalar extractScalarFactor(const XprType& x)
|
|
469
|
-
|
|
522
|
+
EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) { return Base::extract(x.lhs()); }
|
|
523
|
+
EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
|
|
524
|
+
return Base::extractScalarFactor(x.lhs()) * x.rhs().functor().m_other;
|
|
525
|
+
}
|
|
470
526
|
};
|
|
471
|
-
template<typename Scalar, typename Plain1, typename Plain2>
|
|
472
|
-
struct blas_traits<CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>,Plain1>,
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
{};
|
|
527
|
+
template <typename Scalar, typename Plain1, typename Plain2>
|
|
528
|
+
struct blas_traits<CwiseBinaryOp<scalar_product_op<Scalar>, const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain1>,
|
|
529
|
+
const CwiseNullaryOp<scalar_constant_op<Scalar>, Plain2> > >
|
|
530
|
+
: blas_traits<CwiseNullaryOp<scalar_constant_op<Scalar>, Plain1> > {};
|
|
476
531
|
|
|
477
532
|
// pop opposite
|
|
478
|
-
template<typename Scalar, typename NestedXpr>
|
|
479
|
-
struct blas_traits<CwiseUnaryOp<scalar_opposite_op<Scalar>, NestedXpr> >
|
|
480
|
-
|
|
481
|
-
{
|
|
482
|
-
enum {
|
|
483
|
-
HasScalarFactor = true
|
|
484
|
-
};
|
|
533
|
+
template <typename Scalar, typename NestedXpr>
|
|
534
|
+
struct blas_traits<CwiseUnaryOp<scalar_opposite_op<Scalar>, NestedXpr> > : blas_traits<NestedXpr> {
|
|
535
|
+
enum { HasScalarFactor = true };
|
|
485
536
|
typedef blas_traits<NestedXpr> Base;
|
|
486
537
|
typedef CwiseUnaryOp<scalar_opposite_op<Scalar>, NestedXpr> XprType;
|
|
487
538
|
typedef typename Base::ExtractType ExtractType;
|
|
488
|
-
static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
|
|
489
|
-
static inline Scalar extractScalarFactor(const XprType& x)
|
|
490
|
-
|
|
539
|
+
EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) { return Base::extract(x.nestedExpression()); }
|
|
540
|
+
EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
|
|
541
|
+
return -Base::extractScalarFactor(x.nestedExpression());
|
|
542
|
+
}
|
|
491
543
|
};
|
|
492
544
|
|
|
493
545
|
// pop/push transpose
|
|
494
|
-
template<typename NestedXpr>
|
|
495
|
-
struct blas_traits<Transpose<NestedXpr> >
|
|
496
|
-
: blas_traits<NestedXpr>
|
|
497
|
-
{
|
|
546
|
+
template <typename NestedXpr>
|
|
547
|
+
struct blas_traits<Transpose<NestedXpr> > : blas_traits<NestedXpr> {
|
|
498
548
|
typedef typename NestedXpr::Scalar Scalar;
|
|
499
549
|
typedef blas_traits<NestedXpr> Base;
|
|
500
550
|
typedef Transpose<NestedXpr> XprType;
|
|
501
|
-
typedef Transpose<const typename Base::
|
|
502
|
-
|
|
503
|
-
typedef typename
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
}
|
|
510
|
-
static inline
|
|
511
|
-
|
|
551
|
+
typedef Transpose<const typename Base::ExtractType_>
|
|
552
|
+
ExtractType; // const to get rid of a compile error; anyway blas traits are only used on the RHS
|
|
553
|
+
typedef Transpose<const typename Base::ExtractType_> ExtractType_;
|
|
554
|
+
typedef std::conditional_t<bool(Base::HasUsableDirectAccess), ExtractType, typename ExtractType::PlainObject>
|
|
555
|
+
DirectLinearAccessType;
|
|
556
|
+
enum { IsTransposed = Base::IsTransposed ? 0 : 1 };
|
|
557
|
+
EIGEN_DEVICE_FUNC static inline ExtractType extract(const XprType& x) {
|
|
558
|
+
return ExtractType(Base::extract(x.nestedExpression()));
|
|
559
|
+
}
|
|
560
|
+
EIGEN_DEVICE_FUNC static inline Scalar extractScalarFactor(const XprType& x) {
|
|
561
|
+
return Base::extractScalarFactor(x.nestedExpression());
|
|
562
|
+
}
|
|
512
563
|
};
|
|
513
564
|
|
|
514
|
-
template<typename T>
|
|
515
|
-
struct blas_traits<const T>
|
|
516
|
-
: blas_traits<T>
|
|
517
|
-
{};
|
|
565
|
+
template <typename T>
|
|
566
|
+
struct blas_traits<const T> : blas_traits<T> {};
|
|
518
567
|
|
|
519
|
-
template<typename T, bool HasUsableDirectAccess=blas_traits<T>::HasUsableDirectAccess>
|
|
568
|
+
template <typename T, bool HasUsableDirectAccess = blas_traits<T>::HasUsableDirectAccess>
|
|
520
569
|
struct extract_data_selector {
|
|
521
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static const typename T::Scalar* run(const T& m)
|
|
522
|
-
{
|
|
570
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static const typename T::Scalar* run(const T& m) {
|
|
523
571
|
return blas_traits<T>::extract(m).data();
|
|
524
572
|
}
|
|
525
573
|
};
|
|
526
574
|
|
|
527
|
-
template<typename T>
|
|
528
|
-
struct extract_data_selector<T,false> {
|
|
529
|
-
static typename T::Scalar* run(const T&) { return 0; }
|
|
575
|
+
template <typename T>
|
|
576
|
+
struct extract_data_selector<T, false> {
|
|
577
|
+
EIGEN_DEVICE_FUNC static typename T::Scalar* run(const T&) { return 0; }
|
|
530
578
|
};
|
|
531
579
|
|
|
532
|
-
template<typename T>
|
|
533
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const typename T::Scalar* extract_data(const T& m)
|
|
534
|
-
{
|
|
580
|
+
template <typename T>
|
|
581
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const typename T::Scalar* extract_data(const T& m) {
|
|
535
582
|
return extract_data_selector<T>::run(m);
|
|
536
583
|
}
|
|
537
584
|
|
|
@@ -539,45 +586,37 @@ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE const typename T::Scalar* extract_data(con
|
|
|
539
586
|
* \c combine_scalar_factors extracts and multiplies factors from GEMM and GEMV products.
|
|
540
587
|
* There is a specialization for booleans
|
|
541
588
|
*/
|
|
542
|
-
template<typename ResScalar, typename Lhs, typename Rhs>
|
|
543
|
-
struct combine_scalar_factors_impl
|
|
544
|
-
{
|
|
545
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const Lhs& lhs, const Rhs& rhs)
|
|
546
|
-
{
|
|
589
|
+
template <typename ResScalar, typename Lhs, typename Rhs>
|
|
590
|
+
struct combine_scalar_factors_impl {
|
|
591
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const Lhs& lhs, const Rhs& rhs) {
|
|
547
592
|
return blas_traits<Lhs>::extractScalarFactor(lhs) * blas_traits<Rhs>::extractScalarFactor(rhs);
|
|
548
593
|
}
|
|
549
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const ResScalar& alpha, const Lhs& lhs, const Rhs& rhs)
|
|
550
|
-
{
|
|
594
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static ResScalar run(const ResScalar& alpha, const Lhs& lhs, const Rhs& rhs) {
|
|
551
595
|
return alpha * blas_traits<Lhs>::extractScalarFactor(lhs) * blas_traits<Rhs>::extractScalarFactor(rhs);
|
|
552
596
|
}
|
|
553
597
|
};
|
|
554
|
-
template<typename Lhs, typename Rhs>
|
|
555
|
-
struct combine_scalar_factors_impl<bool, Lhs, Rhs>
|
|
556
|
-
{
|
|
557
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const Lhs& lhs, const Rhs& rhs)
|
|
558
|
-
{
|
|
598
|
+
template <typename Lhs, typename Rhs>
|
|
599
|
+
struct combine_scalar_factors_impl<bool, Lhs, Rhs> {
|
|
600
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const Lhs& lhs, const Rhs& rhs) {
|
|
559
601
|
return blas_traits<Lhs>::extractScalarFactor(lhs) && blas_traits<Rhs>::extractScalarFactor(rhs);
|
|
560
602
|
}
|
|
561
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const bool& alpha, const Lhs& lhs, const Rhs& rhs)
|
|
562
|
-
{
|
|
603
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE static bool run(const bool& alpha, const Lhs& lhs, const Rhs& rhs) {
|
|
563
604
|
return alpha && blas_traits<Lhs>::extractScalarFactor(lhs) && blas_traits<Rhs>::extractScalarFactor(rhs);
|
|
564
605
|
}
|
|
565
606
|
};
|
|
566
607
|
|
|
567
|
-
template<typename ResScalar, typename Lhs, typename Rhs>
|
|
568
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const ResScalar& alpha, const Lhs& lhs,
|
|
569
|
-
{
|
|
570
|
-
return combine_scalar_factors_impl<ResScalar,Lhs,Rhs>::run(alpha, lhs, rhs);
|
|
608
|
+
template <typename ResScalar, typename Lhs, typename Rhs>
|
|
609
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const ResScalar& alpha, const Lhs& lhs,
|
|
610
|
+
const Rhs& rhs) {
|
|
611
|
+
return combine_scalar_factors_impl<ResScalar, Lhs, Rhs>::run(alpha, lhs, rhs);
|
|
571
612
|
}
|
|
572
|
-
template<typename ResScalar, typename Lhs, typename Rhs>
|
|
573
|
-
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const Lhs& lhs, const Rhs& rhs)
|
|
574
|
-
|
|
575
|
-
return combine_scalar_factors_impl<ResScalar,Lhs,Rhs>::run(lhs, rhs);
|
|
613
|
+
template <typename ResScalar, typename Lhs, typename Rhs>
|
|
614
|
+
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE ResScalar combine_scalar_factors(const Lhs& lhs, const Rhs& rhs) {
|
|
615
|
+
return combine_scalar_factors_impl<ResScalar, Lhs, Rhs>::run(lhs, rhs);
|
|
576
616
|
}
|
|
577
617
|
|
|
618
|
+
} // end namespace internal
|
|
578
619
|
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
} // end namespace Eigen
|
|
620
|
+
} // end namespace Eigen
|
|
582
621
|
|
|
583
|
-
#endif
|
|
622
|
+
#endif // EIGEN_BLASUTIL_H
|