29 template <
typename Func,
typename Evaluator>
35 InnerMaxSize =
int(Evaluator::IsRowMajor) ? Evaluator::MaxColsAtCompileTime : Evaluator::MaxRowsAtCompileTime,
36 OuterMaxSize =
int(Evaluator::IsRowMajor) ? Evaluator::MaxRowsAtCompileTime : Evaluator::MaxColsAtCompileTime,
61 :
int(Evaluator::SizeAtCompileTime) *
int(Evaluator::CoeffReadCost) +
69 #ifdef EIGEN_DEBUG_ASSIGN
72 std::cerr.setf(std::ios::hex, std::ios::basefield);
74 std::cerr.unsetf(std::ios::hex);
82 std::cerr <<
"Traversal"
85 std::cerr <<
"Unrolling"
86 <<
" = " << Unrolling <<
" (" << demangle_unrolling(Unrolling) <<
")" << std::endl;
87 std::cerr << std::endl;
98 template <
typename Func,
typename Evaluator, Index Start, Index Length>
110 template <
typename Func,
typename Evaluator, Index Start>
112 static constexpr
Index outer = Start / Evaluator::InnerSizeAtCompileTime;
113 static constexpr
Index inner = Start % Evaluator::InnerSizeAtCompileTime;
118 return eval.coeffByOuterInner(outer, inner);
125 template <
typename Func,
typename Evaluator, Index Start>
131 template <
typename Func,
typename Evaluator, Index Start, Index Length>
143 template <
typename Func,
typename Evaluator, Index Start>
148 return eval.coeff(Start);
155 template <
typename Func,
typename Evaluator, Index Start>
163 template <
typename Func,
typename Evaluator, Index Start, Index Length>
165 template <
typename PacketType>
169 return func.packetOp(
176 template <
typename Func,
typename Evaluator, Index Start>
178 template <
typename PacketType>
181 constexpr
Index index = Start * PacketSize;
182 constexpr
Index outer = index /
int(Evaluator::InnerSizeAtCompileTime);
183 constexpr
Index inner = index %
int(Evaluator::InnerSizeAtCompileTime);
184 constexpr
int alignment = Evaluator::Alignment;
186 return eval.template packetByOuterInner<alignment, PacketType>(outer, inner);
190 template <
typename Func,
typename Evaluator, Index Start, Index Length>
192 template <
typename PacketType>
196 return func.packetOp(
203 template <
typename Func,
typename Evaluator, Index Start>
205 template <
typename PacketType>
208 constexpr
Index index = (Start * PacketSize);
209 constexpr
int alignment = Evaluator::Alignment;
210 return eval.template packet<alignment, PacketType>(index);
218 template <typename Func, typename Evaluator, int Traversal = redux_traits<Func, Evaluator>::Traversal,
219 int Unrolling = redux_traits<Func, Evaluator>::Unrolling>
222 template <
typename Func,
typename Evaluator>
226 template <
typename XprType>
231 for (
Index i = 1;
i < xpr.outerSize(); ++
i)
237 template <
typename Func,
typename Evaluator>
241 template <
typename XprType>
243 eigen_assert(xpr.size() > 0 &&
"you are using an empty matrix");
250 template <
typename Func,
typename Evaluator>
255 template <
typename XprType>
262 template <
typename Func,
typename Evaluator>
267 template <
typename XprType>
274 template <
typename Func,
typename Evaluator>
279 template <
typename XprType>
285 constexpr
int alignment0 =
287 ?
int(packetAlignment)
289 constexpr
int alignment =
plain_enum_max(alignment0, Evaluator::Alignment);
291 const Index alignedSize2 = ((
size - alignedStart) / (2 * packetSize)) * (2 * packetSize);
292 const Index alignedSize = ((
size - alignedStart) / (packetSize)) * (packetSize);
293 const Index alignedEnd2 = alignedStart + alignedSize2;
294 const Index alignedEnd = alignedStart + alignedSize;
297 PacketScalar packet_res0 =
eval.template packet<alignment, PacketScalar>(alignedStart);
298 if (alignedSize > packetSize)
300 PacketScalar packet_res1 =
eval.template packet<alignment, PacketScalar>(alignedStart + packetSize);
301 for (
Index index = alignedStart + 2 * packetSize; index < alignedEnd2; index += 2 * packetSize) {
302 packet_res0 =
func.packetOp(packet_res0,
eval.template packet<alignment, PacketScalar>(index));
303 packet_res1 =
func.packetOp(packet_res1,
eval.template packet<alignment, PacketScalar>(index + packetSize));
306 packet_res0 =
func.packetOp(packet_res0, packet_res1);
307 if (alignedEnd > alignedEnd2)
308 packet_res0 =
func.packetOp(packet_res0,
eval.template packet<alignment, PacketScalar>(alignedEnd2));
327 template <
typename Func,
typename Evaluator,
int Unrolling>
332 template <
typename XprType>
336 const Index innerSize = xpr.innerSize();
337 const Index outerSize = xpr.outerSize();
338 const Index packetedInnerSize = ((innerSize) / packetSize) * packetSize;
340 if (packetedInnerSize) {
341 PacketType packet_res =
eval.template packet<Unaligned, PacketType>(0, 0);
342 for (
Index j = 0;
j < outerSize; ++
j)
343 for (
Index i = (
j == 0 ? packetSize : 0);
i < packetedInnerSize;
i +=
Index(packetSize))
344 packet_res =
func.packetOp(packet_res,
eval.template packetByOuterInner<Unaligned, PacketType>(
j,
i));
347 for (
Index j = 0;
j < outerSize; ++
j)
359 template <
typename Func,
typename Evaluator>
365 static constexpr
Index Size = Evaluator::SizeAtCompileTime;
366 static constexpr
Index VectorizedSize = (
int(Size) /
int(PacketSize)) *
int(PacketSize);
368 template <
typename XprType>
372 if (VectorizedSize > 0) {
375 if (VectorizedSize != Size)
386 template <
typename XprType_>
413 template <
int LoadMode,
typename PacketType>
415 return Base::template packet<LoadMode, PacketType>(
IsRowMajor ? outer : inner,
IsRowMajor ? inner : outer);
434 template <
typename Derived>
435 template <
typename Func>
437 const Func&
func)
const {
441 ThisEvaluator thisEval(derived());
455 template <
typename Derived>
456 template <
int NaNPropagation>
468 template <
typename Derived>
469 template <
int NaNPropagation>
480 template <
typename Derived>
482 if (SizeAtCompileTime == 0 || (SizeAtCompileTime ==
Dynamic &&
size() == 0))
return Scalar(0);
490 template <
typename Derived>
492 #ifdef __INTEL_COMPILER
494 #pragma warning(disable : 2259)
497 #ifdef __INTEL_COMPILER
509 template <
typename Derived>
511 if (SizeAtCompileTime == 0 || (SizeAtCompileTime ==
Dynamic &&
size() == 0))
return Scalar(1);
521 template <
typename Derived>
523 return derived().diagonal().sum();
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define EIGEN_DEBUG_VAR(x)
Definition: Macros.h:815
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_ONLY_USED_FOR_DEBUG(x)
Definition: Macros.h:922
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
#define EIGEN_UNROLLING_LIMIT
Definition: Settings.h:23
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:79
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: CwiseBinaryOp.h:116
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: CwiseBinaryOp.h:111
EIGEN_DEVICE_FUNC internal::traits< Derived >::Scalar maxCoeff() const
EIGEN_DEVICE_FUNC internal::traits< Derived >::Scalar minCoeff() const
EIGEN_DEVICE_FUNC Scalar prod() const
Definition: Redux.h:510
EIGEN_DEVICE_FUNC Scalar redux(const BinaryOp &func) const
EIGEN_DEVICE_FUNC Scalar sum() const
Definition: Redux.h:481
EIGEN_DEVICE_FUNC Scalar mean() const
Definition: Redux.h:491
EIGEN_DEVICE_FUNC Scalar trace() const
Definition: Redux.h:522
XprType::CoeffReturnType CoeffReturnType
Definition: Redux.h:395
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeffByOuterInner(Index outer, Index inner) const
Definition: Redux.h:409
@ InnerSizeAtCompileTime
Definition: Redux.h:406
@ MaxRowsAtCompileTime
Definition: Redux.h:399
@ SizeAtCompileTime
Definition: Redux.h:405
@ IsRowMajor
Definition: Redux.h:404
@ MaxColsAtCompileTime
Definition: Redux.h:400
XprType::Scalar Scalar
Definition: Redux.h:394
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType packetByOuterInner(Index outer, Index inner) const
Definition: Redux.h:414
internal::evaluator< XprType_ > Base
Definition: Redux.h:388
XprType_ XprType
Definition: Redux.h:391
XprType::PacketScalar PacketScalar
Definition: Redux.h:396
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE redux_evaluator(const XprType &xpr)
Definition: Redux.h:392
@ LinearVectorizedTraversal
Definition: Constants.h:287
@ DefaultTraversal
Definition: Constants.h:279
@ SliceVectorizedTraversal
Definition: Constants.h:290
@ LinearTraversal
Definition: Constants.h:281
@ Unaligned
Definition: Constants.h:235
@ CompleteUnrolling
Definition: Constants.h:306
@ NoUnrolling
Definition: Constants.h:301
const unsigned int LinearAccessBit
Definition: Constants.h:133
const unsigned int DirectAccessBit
Definition: Constants.h:159
func(actual_m, actual_n, a, *lda, actual_b, 1, actual_c, 1, alpha)
char char char int int * k
Definition: level2_impl.h:374
constexpr int plain_enum_max(A a, B b)
Definition: Meta.h:656
static Index first_default_aligned(const DenseBase< Derived > &m)
Definition: DenseCoeffsBase.h:539
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
const unsigned int ActualPacketAccessBit
Definition: Constants.h:110
const int HugeCost
Definition: Constants.h:48
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
const int Dynamic
Definition: Constants.h:25
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
double Length
Length of the pipe.
Definition: pipe.cc:52
Definition: Eigen_Colamd.h:49
string name
Definition: plotDoE.py:33
CwiseBinaryOp< internal::scalar_sum_op< double, double >, const CpyMatrixXd, const CpyMatrixXd > XprType
Definition: nestbyvalue.cpp:15
internal::nested_eval< T, 1 >::type eval(const T &xpr)
Definition: sparse_permutations.cpp:47
Definition: TensorMeta.h:47
Definition: XprHelper.h:427
Definition: CoreEvaluators.h:104
find_best_packet_helper< Size, typename packet_traits< T >::type >::type type
Definition: XprHelper.h:290
Definition: XprHelper.h:205
Definition: GenericPacketMath.h:108
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func, const XprType &)
Definition: Redux.h:256
redux_novec_unroller< Func, Evaluator, 0, Evaluator::SizeAtCompileTime > Base
Definition: Redux.h:253
Evaluator::Scalar Scalar
Definition: Redux.h:254
Evaluator::Scalar Scalar
Definition: Redux.h:224
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func, const XprType &xpr)
Definition: Redux.h:227
Evaluator::Scalar Scalar
Definition: Redux.h:266
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func, const XprType &)
Definition: Redux.h:268
redux_novec_linear_unroller< Func, Evaluator, 0, Evaluator::SizeAtCompileTime > Base
Definition: Redux.h:265
Evaluator::Scalar Scalar
Definition: Redux.h:239
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func, const XprType &xpr)
Definition: Redux.h:242
Evaluator::Scalar Scalar
Definition: Redux.h:361
redux_traits< Func, Evaluator >::PacketType PacketType
Definition: Redux.h:363
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func, const XprType &xpr)
Definition: Redux.h:369
redux_traits< Func, Evaluator >::PacketType PacketScalar
Definition: Redux.h:277
static Scalar run(const Evaluator &eval, const Func &func, const XprType &xpr)
Definition: Redux.h:280
Evaluator::Scalar Scalar
Definition: Redux.h:276
static EIGEN_DEVICE_FUNC Scalar run(const Evaluator &eval, const Func &func, const XprType &xpr)
Definition: Redux.h:333
redux_traits< Func, Evaluator >::PacketType PacketType
Definition: Redux.h:330
Evaluator::Scalar Scalar
Definition: Redux.h:329
Evaluator::Scalar Scalar
Definition: Redux.h:157
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &, const Func &)
Definition: Redux.h:158
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &)
Definition: Redux.h:147
Evaluator::Scalar Scalar
Definition: Redux.h:145
static constexpr Index HalfLength
Definition: Redux.h:133
Evaluator::Scalar Scalar
Definition: Redux.h:135
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func)
Definition: Redux.h:137
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &, const Func &)
Definition: Redux.h:128
Evaluator::Scalar Scalar
Definition: Redux.h:127
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &)
Definition: Redux.h:117
Evaluator::Scalar Scalar
Definition: Redux.h:115
static constexpr Index HalfLength
Definition: Redux.h:100
Evaluator::Scalar Scalar
Definition: Redux.h:102
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Evaluator &eval, const Func &func)
Definition: Redux.h:104
find_best_packet< typename Evaluator::Scalar, Evaluator::SizeAtCompileTime >::type PacketType
Definition: Redux.h:32
@ SliceVectorizedWork
Definition: Redux.h:37
@ InnerMaxSize
Definition: Redux.h:35
@ PacketSize
Definition: Redux.h:34
@ OuterMaxSize
Definition: Redux.h:36
@ MayLinearVectorize
Definition: Redux.h:45
@ MaySliceVectorize
Definition: Redux.h:46
@ MayLinearize
Definition: Redux.h:43
@ MightVectorize
Definition: Redux.h:44
@ Traversal
Definition: Redux.h:51
@ UnrollingLimit
Definition: Redux.h:63
@ Cost
Definition: Redux.h:59
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType run(const Evaluator &eval, const Func &)
Definition: Redux.h:206
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType run(const Evaluator &eval, const Func &func)
Definition: Redux.h:193
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType run(const Evaluator &eval, const Func &)
Definition: Redux.h:179
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE PacketType run(const Evaluator &eval, const Func &func)
Definition: Redux.h:166
Template functor to compute the max of two scalars.
Definition: BinaryFunctors.h:171
Template functor to compute the min of two scalars.
Definition: BinaryFunctors.h:142
Template functor to compute the product of two scalars.
Definition: BinaryFunctors.h:73
Template functor to compute the sum of two scalars.
Definition: BinaryFunctors.h:34
Definition: ForwardDeclarations.h:21
Definition: GenericPacketMath.h:134
Definition: benchGeometry.cpp:21
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317