aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/Transpose.h
Commit message (Collapse)AuthorAge
* * change the nesting order of adjoint_return_type toGravatar Gael Guennebaud2009-07-07
| | | | | | 1 - make it easier to catch conjugate expressions 2 - make sure there is no unecessary copy (we had NestByValue<Derived> which seems to be very bad) * update eigensolver wrt recent changes
* * bybye Part, welcome TriangularView and SelfAdjointView.Gravatar Gael Guennebaud2009-07-06
| | | | | | | | * move solveTriangular*() to TriangularView::solve*() * move .llt() to SelfAdjointView * add a high level wrapper to the efficient selfadjoint * vector product * improve LLT so that we can specify which triangular part is meaningless => there are still many things to do (doc, cleaning, improve the matrix products, etc.)
* 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?
* constant Diagonal ---> DiagonalBitsGravatar Benoit Jacob2009-05-10
| | | | | | introduce ei_is_diagonal to check for it DiagonalCoeffs ---> Diagonal and allow Index to by Dynamic -> add MatrixBase::diagonal(int) with unittest and doc
* * Find SuperLU also when it is installed without a superlu/ prefixGravatar Benoit Jacob2009-04-01
| | | | * Some more CoeffReturnType changes
* add adjointInPlace() and add documentation warnings on adjoint() and ↵Gravatar Benoit Jacob2009-03-31
| | | | transpose() about aliasing effects.
* * remove set(), revert to old behavior where = resizesGravatar Benoit Jacob2009-01-21
| | | | | | | | | | * try to be clever in matrix ctors and operator=: be lazy when we can, always allow to copy rowvector into columnvector, check the template parameters, try to factor the code better * add missing copy ctor in UnalignedType * fix bug in the traits of DiagonalProduct * renaming: EIGEN_TUNE_FOR_CPU_CACHE_SIZE * update the dox a little
* Big rewrite in the Sparse module: SparseMatrixBase no longer inherits ↵Gravatar Gael Guennebaud2009-01-14
| | | | | | | | | | | | | | MatrixBase. That means a lot of features which were available for sparse matrices via the dense (and super slow) implemention are no longer available. All features which make sense for sparse matrices (aka can be implemented efficiently) will be implemented soon, but don't expect to see an API as rich as for the dense path. Other changes: * no block(), row(), col() anymore. * instead use .innerVector() to get a col or row vector of a matrix. * .segment(), start(), end() will be back soon, not sure for block() * faster cwise product
* * the Upper->UpperTriangular changeGravatar Benoit Jacob2008-12-20
| | | | * finally get ei_add_test right
* Update e-mail addressGravatar Benoit Jacob2008-11-24
|
* add transposeInPlace (not optimized yet for rectangular matrix)Gravatar Gael Guennebaud2008-10-29
|
* doc and use sed to clean the class hierarchy instead ofGravatar Gael Guennebaud2008-08-28
| | | | preprocessor directives.
* * move memory related stuff to util/Memory.hGravatar Gael Guennebaud2008-08-26
| | | | | * clean ugly doxygen inheritence of expressions * keep improving the documentation... slowly !
* * added optimized paths for matrix-vector and vector-matrix productsGravatar Gael Guennebaud2008-07-09
| | | | | | (using either a cache friendly strategy or re-using dot-product vectorized implementation) * add LinearAccessBit to Transpose
* * 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 !
* various work on the Sparse module:Gravatar Gael Guennebaud2008-06-26
| | | | | | | | | | | | | | | | * added some glue to Eigen/Core (SparseBit, ei_eval, Matrix) * add two new sparse matrix types: HashMatrix: based on std::map (for random writes) LinkedVectorMatrix: array of linked vectors (for outer coherent writes, e.g. to transpose a matrix) * add a SparseSetter class to easily set/update any kind of matrices, e.g.: { SparseSetter<MatrixType,RandomAccessPattern> wrapper(mymatrix); for (...) wrapper->coeffRef(rand(),rand()) = rand(); } * automatic shallow copy for RValue * and a lot of mess ! plus: * remove the remaining ArrayBit related stuff * don't use alloca in product for very large memory allocation
* change derived classes methods from "private:_method()"Gravatar Benoit Jacob2008-06-26
| | | | | | | | to "public:method()" i.e. reimplementing the generic method() from MatrixBase. improves compilation speed by 7%, reduces almost by half the call depth of trivial functions, making gcc errors and application backtraces nicer...
* * 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
* * 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.
* * split Product to a DiagonalProduct template specializationGravatar Gael Guennebaud2008-06-15
| | | | | | | | | | to optimize matrix-diag and diag-matrix products without making Product over complicated. * compilation fixes in Tridiagonalization and HessenbergDecomposition in the case of 2x2 matrices. * added an Orientation2D small class with similar interface than Quaternion (used by Transform to handle 2D and 3D orientations seamlessly) * added a couple of features in Transform.
* * Added a generalized eigen solver for the selfadjoint case.Gravatar Gael Guennebaud2008-06-14
| | | | | | (as new members to SelfAdjointEigenSolver) The QR module now depends on Cholesky. * Fix Transpose to correctly preserve the *TriangularBit.
* * added _*coeffRef members in NestedByValueGravatar Gael Guennebaud2008-05-28
| | | | | | * added ConjugateReturnType and AdjointReturnType that are type-defined to Derived& and Transpose<Derived> if the scalar type is not complex: this avoids abusive copies in the cache friendly Product
* hehe, the complicated nesting scheme in Flagged in the previous commitGravatar Benoit Jacob2008-05-28
| | | | | | | | | | | was a sign that we were doing something wrong. In fact, having NestByValue as a special case of Flagged was wrong, and the previous commit, while not buggy, was inefficient because then when the resulting NestByValue xpr was nested -- hence copied -- the original xpr which was already nested by value was copied again; hence instead of 1 copy we got 3 copies. The solution was to ressuscitate the old Temporary.h (renamed NestByValue.h) as it was the right approach.
* * find the proper way of nesting the expression in Flagged:Gravatar Benoit Jacob2008-05-28
| | | | | | | | | | | | | finally that's more subtle than just using ei_nested, because when flagging with NestByValueBit we want to store the expression by value already, regardless of whether it already had the NestByValueBit set. * rename temporary() ----> nestByValue() * move the old Product.h to disabled/, replace by what was ProductWIP.h * tweak -O and -g flags for tests and examples * reorder the tests -- basic things go first * simplifications, e.g. in many methoeds return derived() and count on implicit casting to the actual return type. * strip some not-really-useful stuff from the heaviest tests
* - 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
* remove Like1DArrayBit in TransposeGravatar Gael Guennebaud2008-05-22
|
* Introduce generic Flagged xpr, remove already Lazy.h and Temporary.hGravatar Benoit Jacob2008-05-14
| | | | Rename DefaultLostFlagMask --> HerediraryBits
* * 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.
* * Draft of a eigenvalues solverGravatar Gael Guennebaud2008-05-12
| | | | | | | | | | | | | | | (does not support complex and does not re-use the QR decomposition) * Rewrite the cache friendly product to have only one instance per scalar type ! This significantly speeds up compilation time and reduces executable size. The current drawback is that some trivial expressions might be evaluated like conjugate or negate. * Renamed "cache optimal" to "cache friendly" * Added the ability to directly access matrix data of some expressions via: - the stride()/_stride() methods - DirectAccessBit flag (replace ReferencableBit)
* * 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.
* fix flag and cost computations for nested expressionsGravatar Gael Guennebaud2008-05-01
|
* * rename XprCopy -> NestedGravatar Benoit Jacob2008-04-10
| | | | | * rename OperatorEquals -> Assign * move Util.h and FwDecl.h to a util/ subdir
* Added initial experimental support for explicit vectorization.Gravatar Gael Guennebaud2008-04-09
| | | | | | | | | | | | | Currently only the following platform/operations are supported: - SSE2 compatible architecture - compiler compatible with intel's SSE2 intrinsics - float, double and int data types - fixed size matrices with a storage major dimension multiple of 4 (or 2 for double) - scalar-matrix product, component wise: +,-,*,min,max - matrix-matrix product only if the left matrix is vectorizable and column major or the right matrix is vectorizable and row major, e.g.: a.transpose() * b is not vectorized with the default column major storage. To use it you must define EIGEN_VECTORIZE and EIGEN_INTEL_PLATFORM.
* * make use of the EvalBeforeNestingBit and EvalBeforeAssigningBitGravatar Gael Guennebaud2008-04-05
| | | | | | | | | | | in ei_xpr_copy and operator=, respectively. * added Matrix::lazyAssign() when EvalBeforeAssigningBit must be skipped (mainly internal use only) * all expressions are now stored by const reference * added Temporary xpr: .temporary() must be called on any temporary expression not directly returned by a function (mainly internal use only) * moved all functors in the Functors.h header * added some preliminaries stuff for the explicit vectorization
* -new: recursive costs system, useful to determine automaticallyGravatar Benoit Jacob2008-04-03
| | | | | | | | when to evaluate arguments and when to meta-unroll. -use it in Product to determine when to eval args. not yet used to determine when to unroll. for now, not used anywhere else but that'll follow. -fix badness of my last commit
* Make use of the LazyBit, introduce .lazy(), remove lazyProduct.Gravatar Benoit Jacob2008-03-31
|
* * introducte recursive Flags system for the expressionsGravatar Benoit Jacob2008-03-30
| | | | | | -- currently 3 flags: RowMajor, Lazy and Large -- only RowMajor actually used for now * many minor improvements
* get rid of MatrixRef, simplifications.Gravatar Benoit Jacob2008-03-13
|
* a lot of renamingGravatar Benoit Jacob2008-03-13
| | | | | | | | internal classes: AaBb -> ei_aa_bb IntAtRunTimeIfDynamic -> ei_int_if_dynamic unify UNROLLING_LIMIT (there was no reason to have operator= use a higher limit) etc...
* generalized ei_traits<>.Gravatar Benoit Jacob2008-03-12
| | | | | | Finally the importing macro is named EIGEN_BASIC_PUBLIC_INTERFACE because it does not only import the ei_traits, it also makes the base class a friend, etc.
* big change: MatrixBase only takes one template parameter "Derived", theGravatar Benoit Jacob2008-03-10
| | | | | | template parameter "Scalar" is removed. This is achieved by introducting a template <typename Derived> struct Scalar to achieve a forward-declaration of the Scalar typedefs.
* renaming: ref() --> asArg()Gravatar Benoit Jacob2008-03-04
|
* * Eigen compiles with any GCC versions from, at least, 3.3 without the ↵Gravatar Gael Guennebaud2008-03-04
| | | | | | previous ugly hack :) * Renamed the scalar functors with the "Scalar" prefix (instead of "Cwise")
* * Added generic unary operators (replace Opposite and Conjugate)Gravatar Gael Guennebaud2008-03-03
| | | | | | | | | | | * functor templates are not template template parameter anymore (this allows to make templated functors !) * Main page: extented compiler discussion * A small hack to support gcc 3.4 and 4.0 (see the main page) * Fix a cast type issue in Cast * Various doxygen updates (mainly Cwise stuff and added doxygen groups in MatrixBase to split the huge memeber list, still not perfect though) * Updated Gael's email address
* Relicense --> dual-license LGPL3+/GPL2+Gravatar Benoit Jacob2008-02-28
|
* alpha 3.1. in this commit:Gravatar Benoit Jacob2008-01-15
| | | | | | | | | - finally get the Eval stuff right. get back to having Eval as a subclass of Matrix with limited functionality, and then, add a typedef MatrixType to get the actual matrix type. - add swap(), findBiggestCoeff() - bugfix by Ramon in Transpose - new demo: doc/echelon.cpp
* big architecture change dissociating "actual" dimensions from "maximum possible"Gravatar Benoit Jacob2008-01-13
| | | | | | | dimension. The advantage is that evaluating a dynamic-sized block in a fixed-size matrix no longer causes a dynamic memory allocation. Other new thing: IntAtRunTimeIfDynamic allows storing an integer at zero cost if it is known at compile time.
* switch to enums everywhereGravatar Benoit Jacob2008-01-10
|
* Ready for alpha2 release.Gravatar Benoit Jacob2008-01-07
| | | | | | - complete documentation - add TODO - update copyright years