Commit Graph

  • 915587d03d * add CommaInitializer::finished to allow the use of (Matrix3() << v0, v1, 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. Gael Guennebaud 2008-06-03 15:50:09 +0000
  • 196f38f5db improved Quaternion class: - Euler angles and angle axis conversions, - stable spherical interpolation - documentation - update the respective unit test Gael Guennebaud 2008-06-03 13:43:29 +0000
  • bcb32839c2 fix building of examples Gael Guennebaud 2008-06-03 09:43:59 +0000
  • a9cf229e15 add a geometry unit test and fix a couple of typo in Quaternion.h Gael Guennebaud 2008-06-03 07:32:12 +0000
  • 8de4d92b70 - get the doc of the enums in MatrixBase right - get the doc of the flags in Constants right - finally give up with SEPARATE_MEMBER_PAGES: it triggers too big Doxygen bugs, and produces too many small pages. So we have one huge page for MatrixBase at currently 300kb and going up, so the solution especially for users with low bandwidth will be to provide an archive of the html documentation. Benoit Jacob 2008-06-03 02:06:18 +0000
  • 366971bea4 * start of the Geometry module with a cross product and quaternion expressions (haven't tried them yet) * applied the meta selector rule to MatrixBase::swap() Gael Guennebaud 2008-06-02 22:58:36 +0000
  • 75de41a00b big changes in Doxygen configuration; work around bug with doxygen parsing of initialized enum values showing the last word the initializer instead of the actual enum value's name; add some more docs. Benoit Jacob 2008-06-02 20:08:37 +0000
  • ac88feebb7 work around Doxygen bug triggered by r814874, which caused many classes to disappear from the docs. Benoit Jacob 2008-06-02 19:29:23 +0000
  • 6209bbe286 doc improvements: fix linking in Mainpage.dox, improved Doxyfile.in Benoit Jacob 2008-06-02 18:27:37 +0000
  • f2ebbee274 added unit tests for sizeof and dynamic memory allocation Gael Guennebaud 2008-06-02 14:54:52 +0000
  • 54ae2ac7e8 Added the computation of eigen vectors in the symmetric eigen solver. However the eigen vectors are not correct yet, but I really cannot find the problem. Gael Guennebaud 2008-06-02 12:52:08 +0000
  • 3b0523041a since m*m.adjoint() is positive, so are its eigenvalues, so no need for cwiseAbs() Benoit Jacob 2008-06-02 04:45:02 +0000
  • 0444e3601a - add MatrixBase::eigenvalues() convenience method - add MatrixBase::matrixNorm(); in the non-selfadjoint case, we reduce to the selfadjoint case by using the "C*-identity" a.k.a. norm of x = sqrt(norm of x * x.adjoint()) Benoit Jacob 2008-06-02 04:42:45 +0000
  • 92b7e2d6a1 fix a couple of issues making the eigensolver test compile and run without aborting on an assert. Had to fix a stupid bug in Block -- very strange we hadn't hit it before. Benoit Jacob 2008-06-02 02:06:33 +0000
  • 001b01a290 Rewrite from scratch of the eigen solver for symmetric matrices which now supports selfadjoint matrix. The implementation follows Golub's famous book. Gael Guennebaud 2008-06-02 00:30:26 +0000
  • 06752b2b77 * added a Tridiagonalization class for selfadjoint matrices * added MatrixBase::real() * added the ability to extract a selfadjoint matrix from the lower or upper part of a matrix, e.g.: m.extract<Upper|SelfAdjoint>() will ignore the strict lower part and return a selfadjoint. This is compatible with ZeroDiag and UnitDiag. Gael Guennebaud 2008-06-01 17:20:18 +0000
  • dc5fd8dfff meagre outcome for so much time spent! * fix inverse() bug discovered by Gael's test * fix warnings introduced by the new Diagonal stuff * update Doxyfile to v1.5.6 Benoit Jacob 2008-06-01 03:36:49 +0000
  • d5cbb1d002 added a unit test for Inverse discovered that m1 == m1.inverse().inverse() fails though m1.inverse()*m1 == I Gael Guennebaud 2008-05-31 23:44:11 +0000
  • 64169389ed added an *optional* Eigen2 dynamic library. it allows the possiblity to save some compilation time by linking to it *and* defining the token EIGEN_EXTERN_INSTANCIATIONS Gael Guennebaud 2008-05-31 23:21:49 +0000
  • fcf4457b78 added optimized matrix times diagonal matrix product via Diagonal flag shortcut. Gael Guennebaud 2008-05-31 21:35:11 +0000
  • 310f7aa096 moved purely "array" related stuff to a new module Array. This include: - cwise Pow,Sin,Cos,Exp... - cwise Greater and other comparison operators - .any(), .all() and partial reduction - random Gael Guennebaud 2008-05-31 18:11:48 +0000
  • a2f71f9d7e updated EigenSolver to use .coeff / .coeffRef Gael Guennebaud 2008-05-31 16:31:10 +0000
  • c9fb248c36 simply a bit the basic product moving dynamic loops to the corresponding special case of the unrollers. the latter ones are therefore re-named *product_impl. Gael Guennebaud 2008-05-31 15:06:26 +0000
  • f5e599e489 * replace compile-time-if by meta-selector in Assign.h as it speed up compilation. * fix minor typo introduced in the previous commit Gael Guennebaud 2008-05-31 14:42:07 +0000
  • e2ac5d244e Added ArrayBit to get the ability to manipulate a Matrix like a simple scalar. In particular this flag changes the behavior of operator* to a coeff wise product. Gael Guennebaud 2008-05-29 22:33:07 +0000
  • b501e08d81 now the unit-tests (hence all of Eigen) don't depend on Qt at all anymore. Benoit Jacob 2008-05-29 03:37:16 +0000
  • 486fdb26a1 many small fixes and documentation improvements, this should be alpha5. Benoit Jacob 2008-05-29 03:12:30 +0000
  • c1559d3079 * updated the assignement operator macro so that overloads in MatrixBase work * removed product_selector and cleaned Product.h a bit * cleaned Assign.h a bit Gael Guennebaud 2008-05-28 22:56:19 +0000
  • 8711e26c8a * change Flagged to take into account NestByValue only * bugfix in Assign and cache friendly product (weird that worked before) * improved argument evaluation in Product Gael Guennebaud 2008-05-28 22:11:47 +0000
  • 73084dc754 * added _*coeffRef members in NestedByValue * 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 Gael Guennebaud 2008-05-28 09:09:18 +0000
  • f54760c889 hehe, the complicated nesting scheme in Flagged in the previous commit 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. Benoit Jacob 2008-05-28 05:14:16 +0000
  • aebecae510 * find the proper way of nesting the expression in Flagged: 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 Benoit Jacob 2008-05-28 04:38:16 +0000
  • 559233c73e * fix the QR module to use extract/part instead of the previous triangular stuff * added qr and eigensolver tests * fix a compilation warning in Matrix copy constructor Gael Guennebaud 2008-05-27 09:16:27 +0000
  • 5aa00f6870 part 2 of big change: rename Triangular.h -> Extract.h (svn required to commit that separately) Benoit Jacob 2008-05-27 05:50:36 +0000
  • 953efdbfe7 - introduce Part and Extract classes, splitting and extending the former 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 Benoit Jacob 2008-05-27 05:47:30 +0000
  • 8f1fc80a77 some documentation fixes (Cwise* and Cholesky) Gael Guennebaud 2008-05-22 16:31:00 +0000
  • 94e1629a1b * improved product performance: - fallback to normal product for small dynamic matrices - overloaded "c += (a * b).lazy()" to avoid the expensive and useless temporary and setZero() in such very common cases. * fix a couple of issues with the flags Gael Guennebaud 2008-05-22 14:51:25 +0000
  • 106a0c1bef restored the product test Gael Guennebaud 2008-05-22 12:35:09 +0000
  • 9ab6e186eb remove Like1DArrayBit in Transpose Gael Guennebaud 2008-05-22 12:25:11 +0000
  • 522e24f2d7 update of the testing framework: replaced the QTestLib framework my custom macros and a (optional) custom script to run the tests from ctest. Gael Guennebaud 2008-05-22 12:18:55 +0000
  • c6789a279c Fix compilation issues with MSVC and NVCC. Added a few typedef of complex return types in MatrixBase (Needed by MSVC) Gael Guennebaud 2008-05-15 09:40:11 +0000
  • 5da60897ab Introduce generic Flagged xpr, remove already Lazy.h and Temporary.h Rename DefaultLostFlagMask --> HerediraryBits Benoit Jacob 2008-05-14 08:20:15 +0000
  • fd2e9e5c3c * Clean a bit the eigenvalue solver: if the matrix is known to be selfadjoint at compile time, then it returns real eigenvalues. * Fix a couple of bugs with the new product. Gael Guennebaud 2008-05-13 07:40:25 +0000
  • 3eccfd1a78 -fix certain #includes -fix CMakeLists, public headers weren't getting installed Benoit Jacob 2008-05-12 21:15:17 +0000
  • 4317fad869 * Added several cast to int of the enums (needed for some compilers) * Fix a mistake in CwiseNullary. * Added a CoreDeclarions header that declares only the forward declarations and related basic stuffs. Gael Guennebaud 2008-05-12 18:09:30 +0000
  • 678f18fce4 put inline keywords everywhere appropriate. So we don't need anymore to pass -finline-limit=1000 to gcc to get good performance. By the way some cleanup. Benoit Jacob 2008-05-12 17:34:46 +0000
  • f0eb3d2d3b updated product test to carefully test all scalar types and fix an issue in the triangular test Gael Guennebaud 2008-05-12 10:26:10 +0000
  • 45cda6704a * Draft of a eigenvalues solver (does not support complex and does not re-use the QR decomposition) Gael Guennebaud 2008-05-12 10:23:09 +0000
  • dca416cace move arch-specific code to arch/SSE and arch/AltiVec subdirs. rename the noarch PacketMath.h to DummyPacketMath.h Benoit Jacob 2008-05-12 08:30:42 +0000
  • 3562b01105 * Give Konstantinos a copyright line * 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 Benoit Jacob 2008-05-12 08:12:40 +0000
  • 4f6d7abc87 only include SSE3 headers if compiling with SSE3 support Benoit Jacob 2008-05-08 09:15:16 +0000
  • 4754fa4868 removed "sort brief" in doxygen documentation Gael Guennebaud 2008-05-08 08:13:38 +0000
  • bf5326c3ca * Added ReferencableBit flag to known if coeffRef is available. (needed by the new product implementation) * Make the packet* members template to support aligned and unaligned access. This makes Block vectorizable. Combined with ReferencableBit, we should be able to determine at runtime (in some specific cases) if an aligned vectorization is possible or not. * Improved the new product implementation to robustly handle all cases, it now passes all the tests. * Renamed the packet version ei_predux to ei_preduxp to avoid name collision. Gael Guennebaud 2008-05-08 08:12:52 +0000
  • 64c49de7ba * split PacketMath.h to SSE and Altivec specific files * improved the flexibility of the new product implementation, now all sizes seems to be properly handled. Gael Guennebaud 2008-05-05 17:19:47 +0000
  • 46fa4c713f * Started support for unaligned vectorization. * 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. Gael Guennebaud 2008-05-05 10:23:29 +0000
  • 8c6007f80e * Patch by Konstantinos Margaritis: AltiVec vectorization. * Fix several warnings, temporarily disable determinant test. Benoit Jacob 2008-05-03 12:21:23 +0000
  • 0545df2149 slighly improved the cache friendly product to use mul-add only Gael Guennebaud 2008-05-03 10:01:30 +0000
  • a6655dd91a added packet mul-add function (ei_pmad) and updated Product to use it. this change nothing for current SSE architecture but might be helpful for altivec/cell and up comming AMD processors. Gael Guennebaud 2008-05-03 00:45:08 +0000
  • 102e029dad Removed ei_pload1, use posix_memalign to allocate aligned memory, and make Product ok when only one side is vectorizable (and the product is still vectorized) Gael Guennebaud 2008-05-02 13:30:12 +0000
  • e19f9bc523 added a test for triangular matrices Gael Guennebaud 2008-05-02 11:35:59 +0000
  • 890a8de962 Make products always eval into expressions. Improves performance in benchmark. Still not as fasts as explicit eval(), strangely. Benoit Jacob 2008-05-02 08:53:23 +0000
  • ef5b20bc50 fix flag and cost computations for nested expressions Gael Guennebaud 2008-05-01 18:58:30 +0000
  • 5588def0cf nullary xpr are now vectorized Gael Guennebaud 2008-05-01 14:28:53 +0000
  • 02f1615d2a Enable vectorization of product with dynamic matrices, extended cache optimal product to work in any row/column major situations, and a few bugfixes (forgot to add the Cholesky header, vectorization of CwiseBinary) Gael Guennebaud 2008-05-01 13:53:05 +0000
  • 6486991ac3 some cleaning in Cholesky and removed evil ei_sqrt of complex Gael Guennebaud 2008-04-27 18:57:28 +0000
  • 64bacf1c3f * added ei_sqrt for complex * updated Cholesky to support complex * correct result_type for abs and abs2 functors Gael Guennebaud 2008-04-27 14:05:40 +0000
  • 4ffffa670e added Cholesky module Gael Guennebaud 2008-04-27 10:57:32 +0000
  • 1ec2d21ca5 Fixed a couple of issues introduced in previous commits. Added a test for Triangular. Gael Guennebaud 2008-04-26 20:28:27 +0000
  • b4c974d059 Added triangular assignement, e.g.: m.upper() = a+b; only updates the upper triangular part of m. Note that: m = (a+b).upper(); updates all coefficients of m (but half of the additions will be skiped) Gael Guennebaud 2008-04-26 19:20:26 +0000
  • 4c92150676 Added Triangular expression to extract upper or lower (strictly or not) part of a matrix. Triangular also provide an optimised method for forward and backward substitution. Further optimizations regarding assignments and products might come later. Gael Guennebaud 2008-04-26 18:26:05 +0000
  • 62bf0bbd59 fix a bug in determinant of 4x4 matrices and a small type issue in Inverse Gael Guennebaud 2008-04-26 08:56:52 +0000
  • 173e582e3c added a tough test to check the determinant that currently fails Gael Guennebaud 2008-04-25 23:13:20 +0000
  • 6f2c72fb53 Various fixes in: - vector to vector assign - PartialRedux - Vectorization criteria of Product - returned type of normalized - SSE integer mul Gael Guennebaud 2008-04-25 23:10:37 +0000
  • a451835bce Make the explicit vectorization much more flexible: - support dynamic sizes - support arbitrary matrix size when the matrix can be seen as a 1D array (except for fixed size matrices where the size in Bytes must be a factor of 16, this is to allow compact storage of a vector of matrices) Note that the explict vectorization is still experimental and far to be completely tested. Gael Guennebaud 2008-04-25 15:46:18 +0000
  • 30d47b5250 forgot to add a file in the previous commit Gael Guennebaud 2008-04-24 20:25:55 +0000
  • 9385793f71 Fix a couple of issue with the vectorization. In particular, default ei_p* functions are provided to handle not suported types seemlessly. Gael Guennebaud 2008-04-24 18:35:39 +0000
  • 6ae037dfb5 give up on OpenMP... for now Benoit Jacob 2008-04-18 07:57:46 +0000
  • acfd6f3bda - add _packetCoeff() to Inverse, allowing vectorization. - let Inverse take template parameter MatrixType instead of ExpressionType, in order to reduce executable code size when taking inverses of xpr's. - introduce ei_corrected_matrix_flags : the flags template parameter to the Matrix class is only a suggestion. This is also useful in ei_eval. Benoit Jacob 2008-04-16 07:18:27 +0000
  • 43e2bc14fe +5% optimization in 4x4 inverse: -only evaluate block expressions for which that is beneficial -don't check for invertibility unless requested Benoit Jacob 2008-04-15 20:39:27 +0000
  • 6747b45ae7 for 4x4 matrices implement the special algorithm that Markos proposed, falling back to the general algorithm in the bad case. Benoit Jacob 2008-04-15 20:15:36 +0000
  • 2a86f052a5 - optimized determinant calculations for small matrices (size <= 4) (only 30 muls for size 4) - rework the matrix inversion: now using cofactor technique for size<=3, so the ugly unrolling is only used for size 4 anymore, and even there I'm looking to get rid of it. Benoit Jacob 2008-04-14 17:07:12 +0000
  • 9789c04467 when evaluating an xpr, the result can now be vectorizable even if the xpr itself wasn't vectorizable. Benoit Jacob 2008-04-14 08:55:12 +0000
  • ea3ccb1e8c * Start of the LU module, with matrix inversion already there and fully optimized. * Even if LargeBit is set, only parallelize for large enough objects (controlled by EIGEN_PARALLELIZATION_TRESHOLD). Benoit Jacob 2008-04-14 08:20:24 +0000
  • ab4046970b * Add fixed-size template versions of corner(), start(), end(). * Use them to write an unrolled path in echelon.cpp, as an experiment before I do this LU module. * For floating-point types, make ei_random() use an amplitude of 1. Benoit Jacob 2008-04-12 17:37:27 +0000
  • dcebc46cdc - cleaner use of OpenMP (no code duplication anymore) using a macro and _Pragma. - use OpenMP also in cacheOptimalProduct and in the vectorized paths as well - kill the vector assignment unroller. implement in operator= the logic for assigning a row-vector in a col-vector. - CMakeLists support for building tests/examples with -fopenmp and/or -msse2 - updates in bench/, especially replace identity() by ones() which prevents underflows from perturbing bench results. Benoit Jacob 2008-04-11 14:28:42 +0000
  • 7bee90a62a Merge Gael's experimental OpenMP parallelization support into Assign.h. Benoit Jacob 2008-04-11 08:18:47 +0000
  • 187b1543ce added a vectorized version of Product::_cacheOptimalProduct, added the possibility to disable the vectorization using EIGEN_DONT_VECTORIZE (some architectures has SSE support by default) Gael Guennebaud 2008-04-10 12:34:22 +0000
  • 613c49b475 * add typedefs for matrices/vectors with LargeBit * add -pedantic to CXXFLAGS * cleanup intricated expressions with && and || which gave warnings because of "missing" parentheses * fix compile error in NumTraits, apparently discovered by -pedantic Benoit Jacob 2008-04-10 10:33:50 +0000
  • ca448d2537 split those files in util/ some more renaming Benoit Jacob 2008-04-10 09:41:13 +0000
  • 9d8876ce82 * rename XprCopy -> Nested * rename OperatorEquals -> Assign * move Util.h and FwDecl.h to a util/ subdir Benoit Jacob 2008-04-10 09:01:28 +0000
  • 212da8ffe0 fix priority operator bugs in the computation of the VectorizableBit flag, now benchmark.cpp is properly vectorized Gael Guennebaud 2008-04-09 18:24:13 +0000
  • 8f957564ec a better bugfix in ei_matrix_operator_equals_packet_unroller Gael Guennebaud 2008-04-09 18:04:26 +0000
  • d95d952e92 bugfix in ei_matrix_operator_equals_packet_unroller Gael Guennebaud 2008-04-09 17:44:59 +0000
  • 1985fb0551 Added initial experimental support for explicit vectorization. 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. Gael Guennebaud 2008-04-09 12:31:55 +0000
  • 4920f2011e finish making use of CoeffReadCost and the new XprCopy everywhere seems appropriate to me. Benoit Jacob 2008-04-08 14:15:01 +0000
  • 371d302efb - merge ei_xpr_copy and ei_eval_if_needed_before_nesting - make use of CoeffReadCost to determine when to unroll the loops, for now only in Product.h and in OperatorEquals.h performance remains the same: generally still not as good as before the big changes. Benoit Jacob 2008-04-06 18:01:03 +0000
  • 30ec34de36 fix compilation (finish removal of EIGEN_UNROLLED_LOOPS) Benoit Jacob 2008-04-05 14:20:30 +0000
  • 61e58cf602 fixes as discussed with Gael on IRC. Mainly, in Fuzzy.h, and Dot.h, use ei_xpr_copy to evaluate args when needed. Had to introduce an ugly trick with ei_unref as when the XprCopy type is a reference one can't directly access member typedefs such as Scalar. Benoit Jacob 2008-04-05 14:15:02 +0000
  • b4a156671f * make use of the EvalBeforeNestingBit and EvalBeforeAssigningBit 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 Gael Guennebaud 2008-04-05 11:10:54 +0000
  • 048910caae * added cwise comparisons * added "all" and "any" special redux operators * added support bool matrices * added support for cost model of STL functors via ei_functor_traits (By default ei_functor_traits query the functor member Cost) Gael Guennebaud 2008-04-03 18:13:27 +0000