aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAge
* * 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 !
* add mandelbrot demoGravatar Benoit Jacob2008-06-28
|
* fix breakage from my last commitGravatar Benoit Jacob2008-06-28
|
* * update CMakeLists, only build instantiations if TEST_LIB is definedGravatar Benoit Jacob2008-06-27
| | | | | * allow default Matrix constructor in dynamic size, defaulting to (1, 1), this is convenient in mandelbrot example.
* fix a couple of issues in the new Map.hGravatar Benoit Jacob2008-06-27
|
* * 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.
* 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...
* * 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.
* make use of ei_pmadd in dot-product: will further improve performanceGravatar Benoit Jacob2008-06-24
| | | | on architectures having a packed-mul-add assembly instruction.
* * vectorize dot product, copying code from sum.Gravatar Benoit Jacob2008-06-24
| | | | | | | | | | | | | | | * make the conj functor vectorizable: it is just identity in real case, and complex doesn't use the vectorized path anyway. * fix bug in Block: a 3x1 block in a 4x4 matrix (all fixed-size) should not be vectorizable, since in fixed-size we are assuming the size to be a multiple of packet size. (Or would you prefer Vector3d to be flagged "packetaccess" even though no packet access is possible on vectors of that type?) * rename: isOrtho for vectors ---> isOrthogonal isOrtho for matrices ---> isUnitary * add normalize() * reimplement normalized with quotient1 functor
* * add ei_pdiv intrinsic, make quotient functor vectorizableGravatar Benoit Jacob2008-06-23
| | | | * add vdw benchmark from Tim's real-world use case
* optimize linear vectorization both in Assign and Sum (optimal amortized perf)Gravatar Gael Guennebaud2008-06-23
|
* add experimental code for sparse matrix:Gravatar Gael Guennebaud2008-06-23
| | | | | | | | - uses the common "Compressed Column Storage" scheme - supports every unary and binary operators with xpr template assuming binaryOp(0,0) == 0 and unaryOp(0) = 0 (otherwise a sparse matrix doesnot make sense) - this is the first commit, so of course, there are still several shorcommings !
* quick temporary fix for a perf issue we just identified withGravatar Benoit Jacob2008-06-23
| | | | | vectorization.... now the sum benchmark runs 3x faster with vectorization than without.
* add benchmark for sumGravatar Benoit Jacob2008-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.
* forgot to add the unit test array.cppGravatar Gael Guennebaud2008-06-21
|
* work on rotations in the Geometry module:Gravatar Gael Guennebaud2008-06-21
| | | | | - convertions are done trough constructors and operator= - added a EulerAngles class
* Override MatrixBase::eval() since matrices don't needGravatar Benoit Jacob2008-06-20
| | | | to be evaluated, it is enough to just read them.
* * added a pseudo expression Array giving access to:Gravatar Gael Guennebaud2008-06-20
| | | | | | | | - matrix-scalar addition/subtraction operators, e.g.: m.array() += 0.5; - matrix/matrix comparison operators, e.g.: if (m1.array() < m2.array()) {} * fix compilation issues with Transform and gcc < 4.1
* 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)
* * refactoring of Product:Gravatar Gael Guennebaud2008-06-19
| | | | | | | | * use ProductReturnType<>::Type to get the correct Product xpr type * Product is no longer instanciated for xpr types which are evaluated * vectorization of "a.transpose() * b" for the normal product (small and fixed-size matrix) * some cleanning * removed ArrayBase
* fix two bugs dicovered by the previous commit.Gravatar Gael Guennebaud2008-06-16
|
* * 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.
* Added an extensible mechanism to support any kind of rotationGravatar Gael Guennebaud2008-06-15
| | | | | | representation in Transform via the template static class ToRotationMatrix. Added a lightweight AngleAxis class (similar to Rotation2D).
* * 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.
* Started a Transform class in the Geometry module to representGravatar Gael Guennebaud2008-06-15
| | | | | homography. Fix indentation in Quaternion.h
* * 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.
* Add QR and Cholesky module instantiations in the lib.Gravatar Gael Guennebaud2008-06-14
| | | | To try it with the unit tests set the cmake variable TEST_LIB to ON.
* * even though the _Flags default to the corrected value, still correctGravatar Benoit Jacob2008-06-13
| | | | | | | them in the ei_traits, so that they're guaranteed even if the user specified his own non-default flags (like before). Measured to not make compilation any slower.
* * make the _Flags template parameter of Matrix default to the correctedGravatar Benoit Jacob2008-06-13
| | | | | | | | | flags. This ensures that unless explicitly messed up otherwise, a Matrix type is equal to its own Eval type. This seriously reduces the number of types instantiated. Measured +13% compile speed, -7% binary size. * Improve doc of Matrix template parameters.
* Added a Hessenberg decomposition class for both real and complex matrices.Gravatar Gael Guennebaud2008-06-08
| | | | | | | This is the first step towards a non-selfadjoint eigen solver. Notes: - We might consider merging Tridiagonalization and Hessenberg toghether ? - Or we could factorize some code into a Householder class (could also be shared with QR)
* * rewrite of the QR decomposition:Gravatar Gael Guennebaud2008-06-07
| | | | | | - works for complex - allows direct access to the matrix R * removed the scale by the matrix dimensions in MatrixBase::isMuchSmallerThan(scalar)
* * remove Cross product expression: MatrixBase::cross() now returns a temporaryGravatar Gael Guennebaud2008-06-07
| | | | | | which is even better optimized by the compiler. * Quaternion no longer inherits MatrixBase. Instead it stores the coefficients using a Matrix<> and provides only relevant methods.
* * 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
* Updated fuzzy comparisons to use L2 norm as all my experimentsGravatar Gael Guennebaud2008-06-06
| | | | | | tends to show L2 norm works very well here. (the legacy implementation is still available via a preprocessor token to allow further experiments if needed...)
* fix a compilation issue in non debug modeGravatar Gael Guennebaud2008-06-06
|
* fix some compile errors with gcc 4.3, some warnings, some documentationGravatar Benoit Jacob2008-06-06
|
* add an optimized path for the tridiagonalization of a 3x3 matrix.Gravatar Gael Guennebaud2008-06-04
| | | | (useful for plane fitting, and covariance analysis of 3D data)
* added a static assertion mechanismGravatar Gael Guennebaud2008-06-04
| | | | (see notes in Core/util/StaticAssert.h for details)
* hack to to make the nomalloc unit test compiles with -pedanticGravatar Gael Guennebaud2008-06-04
|
* update of the eigeinsolver unit test to check complexGravatar Gael Guennebaud2008-06-03
|
* fix eigenvectors computations :)Gravatar Gael Guennebaud2008-06-03
|
* * add CommaInitializer::finished to allow the use of (Matrix3() << v0, v1, ↵Gravatar Gael Guennebaud2008-06-03
| | | | | | | | v2).finished() as an argument of a function. Other possibilities for the name could be "end" or "matrix" ?? * various update in Quaternion, in particular I added a lot of FIXME about the API options, these have to be discussed and fixed.