aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/Assign.h
Commit message (Collapse)AuthorAge
* rename back MayAliasBit to EvalBeforeAssigningBitGravatar Gael Guennebaud2009-08-16
|
* As proposed on the list:Gravatar Gael Guennebaud2009-08-15
| | | | | | | | | - rename EvalBeforeAssignBit to MayAliasBit - make .lazy() remove the MayAliasBit only, and mark it as deprecated - add a NoAlias pseudo expression, and MatrixBase::noalias() function Todo: - we have to decide whether += and -= assume no aliasing by default ? - once we agree on the API: update the Sparse module and the unit tests respectively.
* add EIGEN_DEBUG_VARGravatar Benoit Jacob2009-08-11
|
* remove #include Bidiagonalization, and add missing ";"Gravatar Gael Guennebaud2009-08-11
|
* LinearVectorization: If the destination isn't aligned,Gravatar Benoit Jacob2009-08-09
| | | | we have to do runtime checks and we don't unroll, so it's only good for large enough sizes
* now you can #define EIGEN_DEBUG_ASSIGN, and all the values in ↵Gravatar Benoit Jacob2009-08-09
| | | | ei_assign_traits are printed
* apply Gael's idea for auto transpose in mixed fixed/dynamic caseGravatar Benoit Jacob2009-08-03
|
* new implementation of diagonal matrices and diagonal matrix expressionsGravatar Benoit Jacob2009-06-28
|
* remove sentence "Eigen itself is part of the KDE project."Gravatar Benoit Jacob2009-05-22
| | | | it never made very precise sense. but now does it still make any?
* fix assertion issue in slice vectorizationGravatar Gael Guennebaud2009-02-16
|
* centralize those static asserts more upstream, reduces duplication and ↵Gravatar Benoit Jacob2009-01-27
| | | | | | ensures they can't be bypassed (e.g. until now it was possible to bypass the static assert on sizes)
* * add unit-tests to check allowed and forbiddent mixing of different scalar ↵Gravatar Benoit Jacob2008-12-22
| | | | | | | types * fix issues in Product revealed by this test * in Dot.h forbid mixing of different types (at least for now, might allow real.dot(complex) in the future).
* * fix a vectorization issue in ProductGravatar Gael Guennebaud2008-12-19
| | | | | | * use _mm_malloc/_mm_free on other platforms than linux of MSVC (eg., cygwin, OSX) * replace a lot of inline keywords by EIGEN_STRONG_INLINE to compensate for poor MSVC inlining
* * replace postfix ++ by prefix ++ wherever that makes sense in Eigen/Gravatar Benoit Jacob2008-12-17
| | | | | * fix some "unused variable" warnings in the tests; there remains a libstdc++ "deprecated" warning which I haven't looked much into
* more warning fixes by Armin BerresGravatar Gael Guennebaud2008-12-15
|
* * Much better, consistent error msgs when mixing different scalar types:Gravatar Benoit Jacob2008-12-03
| | | | | | | | | | | | | - in matrix-matrix product, static assert on the two scalar types to be the same. - Similarly in CwiseBinaryOp. POTENTIALLY CONTROVERSIAL: we don't allow anymore binary ops to take two different scalar types. The functors that we defined take two args of the same type anyway; also we still allow the return type to be different. Again the reason is that different scalar types are incompatible with vectorization. Better have the user realize explicitly what mixing different numeric types costs him in terms of performance. See comment in CwiseBinaryOp constructor. - This allowed to fix a little mistake in test/regression.cpp, mixing float and double - Remove redundant semicolon (;) after static asserts
* Update e-mail addressGravatar Benoit Jacob2008-11-24
|
* Bugfix regarding alignent in Assign.h (updated map unit test to detect this bug)Gravatar Gael Guennebaud2008-09-03
| | | | | Anyway: LinearVectorization+CompleteUnrolling actually uses the InnerVectorization unrollers, so these two cases could be merged to a single one...
* * remove debug code commited by mistake in AssignGravatar Gael Guennebaud2008-08-26
| | | | * keep going on the doc: added a short geometry tutorial
* temporary fix of the pèrevious commitGravatar Gael Guennebaud2008-08-24
|
* * Added .all() and .any() members to PartialReduxGravatar Gael Guennebaud2008-08-20
| | | | | * Bug fixes in euler angle snippet, Assign and MapBase * Started a "quick start guide" (draft state)
* change solveTriangularInPlace() to take a pointer as input (as discussed on ↵Gravatar Gael Guennebaud2008-08-12
| | | | | | IRC). extended the documentation of the triangular solver.
* * Big change in Block and Map:Gravatar Gael Guennebaud2008-08-09
| | | | | | | | | | | | | | - added a MapBase base xpr on top of which Map and the specialization of Block are implemented - MapBase forces both aligned loads (and aligned stores, see below) in expressions such as "x.block(...) += other_expr" * Significant vectorization improvement: - added a AlignedBit flag meaning the first coeff/packet is aligned, this allows to not generate extra code to deal with the first unaligned part - removed all unaligned stores when no unrolling - removed unaligned loads in Sum when the input as the DirectAccessBit flag * Some code simplification in CacheFriendly product * Some minor documentation improvements
* introduce copyCoeff and copyPacket methods in MatrixBase, used byGravatar Benoit Jacob2008-08-05
| | | | | Assign, in preparation for new Swap impl reusing Assign code. remove last remnant of old Inverse class in Transform.
* Several compilation fixes for MSVC and NVCC, basically:Gravatar Gael Guennebaud2008-07-29
| | | | | | | | - added explicit enum to int conversion where needed - if a function is not defined as declared and the return type is "tricky" then the type must be typedefined somewhere. A "tricky return type" can be: * a template class with a default parameter which depends on another template parameter * a nested template class, or type of a nested template class
* Add a *very efficient* evaluation path for both col-major matrix * vectorGravatar Gael Guennebaud2008-07-12
| | | | | | and vector * row-major products. Currently, it is enabled only is the matrix has DirectAccessBit flag and the product is "large enough". Added the respective unit tests in test/product/cpp.
* some performance fixes in Assign.h reported by Gael. Some doc update inGravatar Benoit Jacob2008-07-10
| | | | Cwise.
* * do the ActualPacketAccesBit change as discussed on listGravatar Benoit Jacob2008-07-04
| | | | | * add comment in Product.h about CanVectorizeInner * fix typo in test/product.cpp
* * added innerSize / outerSize functions to MatrixBaseGravatar Gael Guennebaud2008-06-28
| | | | | | | * added complete implementation of sparse matrix product (with a little glue in Eigen/Core) * added an exhaustive bench of sparse products including GMM++ and MTL4 => Eigen outperforms in all transposed/density configurations !
* * rework Map, allow vectorizationGravatar Benoit Jacob2008-06-27
| | | | | | | | * rework PacketMath and DummyPacketMath, make these actual template specializations instead of just overriding by non-template inline functions * introduce ei_ploadt and ei_pstoret, make use of them in Map and Matrix * remove Matrix::map() methods, use Map constructors instead.
* * add bench/benchVecAdd.cpp by Gael, fix crash (ei_pload on non-aligned)Gravatar Benoit Jacob2008-06-26
| | | | | | | | | | | | * introduce packet(int), make use of it in linear vectorized paths --> completely fixes the slowdown noticed in benchVecAdd. * generalize coeff(int) to linear-access xprs * clarify the access flag bits * rework api dox in Coeffs.h and util/Constants.h * improve certain expressions's flags, allowing more vectorization * fix bug in Block: start(int) and end(int) returned dyn*dyn size * fix bug in Block: just because the Eval type has packet access doesn't imply the block xpr should have it too.
* optimize linear vectorization both in Assign and Sum (optimal amortized perf)Gravatar Gael Guennebaud2008-06-23
|
* split sum away from redux and vectorize it.Gravatar Benoit Jacob2008-06-23
| | | | | | (could come back to redux after it has been vectorized, and could serve as a starting point for that) also make the abs2 functor vectorizable (for real types).
* * implement slice vectorization. Because it uses unalignedGravatar Benoit Jacob2008-06-22
| | | | | | | | | packet access, it is not certain that it will bring a performance improvement: benchmarking needed. * improve logic choosing slice vectorization. * fix typo in SSE packet math, causing crash in unaligned case. * fix bug in Product, causing crash in unaligned case. * add TEST_SSE3 CMake option.
* move "enum" back to "const int" int ei_assign_impl: in fact, castingGravatar Gael Guennebaud2008-06-20
| | | | enums to int is enough to get compile time constants with ICC.
* * more cleaning in ProductGravatar Gael Guennebaud2008-06-19
| | | | | | * make Matrix2f (and similar) vectorized using linear path * fix a couple of warnings and compilation issues with ICC and gcc 3.3/3.4 (cannot get Transform compiles with gcc 3.3/3.4, see the FIXME)
* * Block: row and column expressions in the inner directionGravatar Benoit Jacob2008-06-16
| | | | | | | | | now have the Like1D flag. * Big renaming: packetCoeff ---> packet VectorizableBit ---> PacketAccessBit Like1DArrayBit ---> LinearAccessBit
* aaargh.Gravatar Benoit Jacob2008-06-16
|
* fix bug in computation of unrolling limit: div instead of mulGravatar Benoit Jacob2008-06-16
|
* * Big rework of Assign.h:Gravatar Benoit Jacob2008-06-16
| | | | | | | | | | | | | | | ** Much better organization ** Fix a few bugs ** Add the ability to unroll only the inner loop ** Add an unrolled path to the Like1D vectorization. Not well tested. ** Add placeholder for sliced vectorization. Unimplemented. * Rework of corrected_flags: ** improve rules determining vectorizability ** for vectors, the storage-order is indifferent, so we tweak it to allow vectorization of row-vectors. * fix compilation in benchmark, and a warning in Transpose.
* * move some compile time "if" to their respective unroller (assign and dot)Gravatar Gael Guennebaud2008-06-07
| | | | | * fix a couple of compilation issues when unrolling is disabled * reduce default unrolling limit to a more reasonable value
* added a static assertion mechanismGravatar Gael Guennebaud2008-06-04
| | | | (see notes in Core/util/StaticAssert.h for details)
* * replace compile-time-if by meta-selector in Assign.hGravatar Gael Guennebaud2008-05-31
| | | | | as it speed up compilation. * fix minor typo introduced in the previous commit
* * updated the assignement operator macro so that overloadsGravatar Gael Guennebaud2008-05-28
| | | | | | in MatrixBase work * removed product_selector and cleaned Product.h a bit * cleaned Assign.h a bit
* * change Flagged to take into account NestByValue onlyGravatar Gael Guennebaud2008-05-28
| | | | | * bugfix in Assign and cache friendly product (weird that worked before) * improved argument evaluation in Product
* - introduce Part and Extract classes, splitting and extending the formerGravatar Benoit Jacob2008-05-27
| | | | | | | | | | Triangular class - full meta-unrolling in Part - move inverseProduct() to MatrixBase - compilation fix in ProductWIP: introduce a meta-selector to only do direct access on types that support it. - phase out the old Product, remove the WIP_DIRTY stuff. - misc renaming and fixes
* * Added several cast to int of the enums (needed for some compilers)Gravatar Gael Guennebaud2008-05-12
| | | | | | * Fix a mistake in CwiseNullary. * Added a CoreDeclarions header that declares only the forward declarations and related basic stuffs.
* put inline keywords everywhere appropriate. So we don't need anymore to passGravatar Benoit Jacob2008-05-12
| | | | -finline-limit=1000 to gcc to get good performance. By the way some cleanup.
* * Give Konstantinos a copyright lineGravatar Benoit Jacob2008-05-12
| | | | | | | | * Fix compilation of Inverse.h with vectorisation * Introduce EIGEN_GNUC_AT_LEAST(x,y) macro doing future-proof (e.g. gcc v5.0) check * Only use ProductWIP if vectorisation is enabled * rename EIGEN_ALWAYS_INLINE -> EIGEN_INLINE with fall-back to inline keyword * some cleanup/indentation
* * Started support for unaligned vectorization.Gravatar Gael Guennebaud2008-05-05
| | | | | | | | | | | | | * Introduce a new highly optimized matrix-matrix product for large matrices. The code is still highly experimental and it is activated only if you define EIGEN_WIP_PRODUCT at compile time. Currently the third dimension of the product must be a factor of the packet size (x4 for floats) and the right handed side matrix must be column major. Moreover, currently c = a*b; actually computes c += a*b !! Therefore, the code is provided for experimentation purpose only ! These limitations will be fixed soon or later to become the default product implementation.