Commit Graph

1788 Commits

Author SHA1 Message Date
Rasmus Munk Larsen
bb8811c655 Enable inverse() method for computing pseudo-inverse. 2016-02-09 20:35:20 -08:00
Rasmus Munk Larsen
414efa47d3 Add missing calls to tests of COD.
Fix a few mistakes in 3.2 -> 3.3 port.
2016-02-08 08:50:34 -08:00
Rasmus Munk Larsen
86d6201d7b Merge. 2016-02-06 16:36:56 -08:00
Rasmus Munk Larsen
d904c8ac8f Implement complete orthogonal decomposition in Eigen. 2016-02-06 16:32:00 -08:00
Gael Guennebaud
8e599bc098 Fix warning in unit test 2016-02-06 20:26:59 +01:00
Gael Guennebaud
5b2d287878 bug #779: allow non aligned buffers for buffers smaller than the requested alignment. 2016-02-05 21:46:39 +01:00
Rasmus Munk Larsen
093f2b3c01 Merge. 2016-02-04 14:32:19 -08:00
Rasmus Munk Larsen
2e39cc40a4 Fix condition that made the unit test spam stdout with bogus error messages. 2016-02-04 12:56:14 -08:00
Benoit Steiner
6c9cf117c1 Fixed indentation 2016-02-04 10:34:10 -08:00
Gael Guennebaud
b70db60e4d Merged in rmlarsen/eigen (pull request PR-161)
Change Eigen's ColPivHouseholderQR to use  numerically stable norm downdate formula
2016-02-03 21:37:06 +01:00
Rasmus Munk Larsen
5fb04ab2da Fix bad line break. Don't repeat Kahan matrix test since it is deterministic. 2016-02-03 10:12:10 -08:00
Damien R
c301f99208 bug #1164: fix list and deque specializations such that our aligned allocator is automatically activatived only when the user did not specified an allocator (or specified the default std::allocator). 2016-02-03 18:07:25 +01:00
Benoit Steiner
d93b71a301 Updated the packetmath test to call predux_half instead of predux4 2016-02-01 15:18:33 -08:00
Rasmus Munk Larsen
00f9ef6c76 merging. 2016-02-01 11:10:30 -08:00
Gael Guennebaud
ec469700dc bug #557: make InnerIterator of sparse storage types more versatile by adding default-ctor, copy-ctor/assignment 2016-02-01 15:04:33 +01:00
Gael Guennebaud
6e0a86194c Fix integer path for num_steps==1 2016-02-01 15:00:04 +01:00
Gael Guennebaud
e1d219e5c9 bug #698: fix linspaced for integer types. 2016-02-01 14:25:34 +01:00
Gael Guennebaud
a4e4542b89 Avoid overflow in unit test. 2016-01-30 22:26:17 +01:00
Gael Guennebaud
3ba8a3ab1a Disable underflow unit test on the i387 FPU. 2016-01-30 22:14:04 +01:00
Gael Guennebaud
15084cf1ac bug #632: add support for "dense +/- sparse" operations. The current implementation is based on SparseView to make the dense subexpression compatible with the sparse one. 2016-01-29 22:09:45 +01:00
Gael Guennebaud
d8d37349c3 bug #696: enable zero-sized block at compile-time by relaxing the respective assertion 2016-01-29 12:44:49 +01:00
Rasmus Munk Larsen
acce4dd050 Change Eigen's ColPivHouseholderQR to use the numerically stable norm downdate formula from http://www.netlib.org/lapack/lawnspdf/lawn176.pdf, which has been used in LAPACK's xGEQPF and xGEQP3 since 2006. With the old formula, the code chooses the wrong pivots and fails to correctly determine rank on graded matrices.
This change also adds additional checks for non-increasing diagonal in R11 to existing unit tests, and adds a new unit test with the Kahan matrix, which consistently fails for the original code.

Benchmark timings on Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz. Code compiled with AVX & FMA. I just ran on square matrices of 3 difference sizes.

Benchmark               Time(ns)     CPU(ns) Iterations
-------------------------------------------------------
Before:
BM_EigencolPivQR/64        53677       53627      12890
BM_EigencolPivQR/512    15265408    15250784         46
BM_EigencolPivQR/4k  15403556228 15388788368          2

After (non-vectorized version):
Benchmark               Time(ns)     CPU(ns) Iterations  Degradation
--------------------------------------------------------------------
BM_EigencolPivQR/64        63736       63669      10844         18.5%
BM_EigencolPivQR/512    16052546    16037381         43          5.1%
BM_EigencolPivQR/4k  15149263620 15132025316          2         -2.0%

Performance-wise there seems to be a ~18.5% degradation for small (64x64) matrices, probably due to the cost of more O(min(m,n)^2) sqrt operations that are not needed for the unstable formula.
2016-01-28 15:07:26 -08:00
Gael Guennebaud
c1d900af61 bug #178: remove additional const on nested expression, and remove several const_cast. 2016-01-28 21:43:20 +01:00
Gael Guennebaud
ddf64babde merge 2016-01-28 13:21:48 +01:00
Gael Guennebaud
df15fbc452 bug #1158: PartialReduxExpr is a vector expression, and it thus must expose the LinearAccessBit flag 2016-01-28 13:16:30 +01:00
Gael Guennebaud
9ac8e8c6a1 Extend mixing type unit test with trmv, and the following not yet supported products: trmm, symv, symm 2016-01-27 17:29:53 +01:00
Gael Guennebaud
6da5d87f92 add nomalloc unit test for rank2 updates 2016-01-27 17:26:48 +01:00
Gael Guennebaud
9801c959e6 Fix tri = complex * real product, and add respective unit test. 2016-01-27 17:12:25 +01:00
Gael Guennebaud
412bb5a631 Remove redundant test. 2016-01-26 23:35:30 +01:00
Gael Guennebaud
8328caa618 bug #51: add block preallocation mechanism to selfadjoit*matrix product. 2016-01-25 22:06:42 +01:00
Gael Guennebaud
e58827d2ed bug #51: make general_matrix_matrix_triangular_product use L3-blocking helper so that general symmetric rank-updates and general-matrix-to-triangular products do not trigger dynamic memory allocation for fixed size matrices. 2016-01-25 17:16:33 +01:00
Gael Guennebaud
869b4443ac Add SparseVector::conservativeResize() method. 2016-01-25 11:55:39 +01:00
Gael Guennebaud
1cf85bd875 bug #977: add stableNormalize[d] methods: they are analogues to normalize[d] but with carefull handling of under/over-flow 2016-01-23 22:40:11 +01:00
Gael Guennebaud
0caa4b1531 bug #1150: make IncompleteCholesky more robust by iteratively increase the shift until the factorization succeed (with at most 10 attempts). 2016-01-23 22:13:54 +01:00
Gael Guennebaud
5358c38589 bug #1095: add Cholmod*::logDeterminant/determinant (from patch of Joshua Pritikin) 2016-01-22 16:05:29 +01:00
Gael Guennebaud
ee37eb4eed bug #977: avoid division by 0 in normalize() and normalized(). 2016-01-21 20:43:42 +01:00
Gael Guennebaud
62f7e77711 add upper|lower case in incomplete_cholesky unit test 2016-01-21 00:02:59 +01:00
Gael Guennebaud
ed8ade9c65 bug #1149: fix Pastix*::*parm() 2016-01-20 19:01:24 +01:00
Gael Guennebaud
8b9dc9f0df bug #1144: fix regression in x=y+A*x (aliasing), and move evaluator_traits::AssumeAliasing to evaluator_assume_aliasing. 2016-01-09 08:30:38 +01:00
Eugene Brevdo
14897600b7 Protect digamma tests behind a EIGEN_HAS_C99_MATH check. 2015-12-24 21:28:18 -08:00
Eugene Brevdo
f7362772e3 Add digamma for CPU + CUDA. Includes tests. 2015-12-24 21:15:38 -08:00
Gael Guennebaud
ca39b1546e Merged in ebrevdo/eigen (pull request PR-148)
Add special functions to eigen: lgamma, erf, erfc.
2015-12-11 11:52:09 +01:00
Gael Guennebaud
836da91b3f Fix unit tests wrt EIGEN_DEFAULT_TO_ROW_MAJOR 2015-12-11 10:06:28 +01:00
Benoit Steiner
6acf2bd472 Fixed compilation error triggered by MSVC 2008 2015-12-10 17:17:42 -08:00
Benoit Steiner
8314962ce2 Only test the lgamma, erf and erfc function when using a C99 compliant compiler 2015-12-10 13:13:45 -08:00
Benoit Steiner
48877a6933 Only implement the lgamma, erf, and erfc functions when using a compiler compliant with the C99 specification. 2015-12-10 13:09:49 -08:00
Gael Guennebaud
46d2f6cd78 Workaround gcc issue with -O3 and the i387 FPU. 2015-12-10 21:33:43 +01:00
Benoit Steiner
b630d10b62 Only disable the erf, erfc, and lgamma tests for older versions of c++. 2015-12-07 17:08:08 -08:00
Benoit Steiner
73b68d4370 Fixed a couple of typos
Cleaned up the code a bit.
2015-12-07 16:38:48 -08:00
Eugene Brevdo
fa4f933c0f Add special functions to Eigen: lgamma, erf, erfc.
Includes CUDA support and unit tests.
2015-12-07 15:24:49 -08:00
Benoit Steiner
e25e3a041b Added rsqrt() method to the Array class: this method computes the coefficient-wise inverse square root much more efficiently than calling sqrt().inverse(). 2015-12-03 18:16:35 -08:00
Gael Guennebaud
1562e13aba Add missing Rotation2D::operator=(Matrix2x2) 2015-12-03 22:25:26 +01:00
Gael Guennebaud
0bb12fa614 Add LU::transpose().solve() and LU::adjoint().solve() API. 2015-12-01 14:38:47 +01:00
Rasmus Munk Larsen
1663d15da7 Add internal method _solve_impl_transposed() to LU decomposition classes that solves A^T x = b or A^* x = b. 2015-11-30 13:39:24 -08:00
Gael Guennebaud
6c02cbbb0f Fix matrix to quaternion (and angleaxis) conversion for matrix expression. 2015-12-01 09:45:56 +01:00
Gael Guennebaud
844561939f Do not check NeedsToAlign if no static alignment 2015-11-30 22:36:14 +01:00
Gael Guennebaud
6fcd316f23 Extend superlu cmake script to check version 2015-11-30 14:48:11 +01:00
Gael Guennebaud
3f32f5ec22 ArrayBase::sign: add unit test and fix doc 2015-11-27 16:27:53 +01:00
Gael Guennebaud
8a2659f0cb Improve numerical robustness of some unit tests 2015-11-23 10:53:55 +01:00
Gael Guennebaud
4522ffd17c Add regression using test for array<complex>/real 2015-11-20 15:29:32 +01:00
Gael Guennebaud
4a985e793c Workaround msvc broken complex/complex division in unit test 2015-11-20 14:52:08 +01:00
Gael Guennebaud
1994999105 Add regression unit test for prod.maxCoeff(i) 2015-11-18 23:29:07 +01:00
Gael Guennebaud
a64156cae5 Workaround i387 issue in unit test 2015-11-16 13:33:54 +01:00
Gael Guennebaud
21ed29e2c9 Disable complex scalar types because the compiler might aggressively vectorize
the initialization of complex coeffs to 0 before we can check for alignedness
2015-12-09 20:46:09 +01:00
Gael Guennebaud
03ad4fc504 Extend unit test of coeff-based product to check many more combinations 2015-12-08 11:27:43 +01:00
Gael Guennebaud
bfd6ee64f3 bug #1105: fix default preallocation when moving from compressed to uncompressed mode 2015-11-06 15:05:37 +01:00
Gael Guennebaud
780eeb3be7 prevent stack overflow in unit test 2015-11-05 00:32:48 -08:00
Gael Guennebaud
90323f1751 Fix AVX round/ceil/floor, and fix respective unit test 2015-11-04 22:15:57 +01:00
Gael Guennebaud
3dd24bdf99 Merged in aavenel/eigen (pull request PR-142)
Add round, ceil and floor for SSE4.1/AVX (Bug #70)
2015-11-04 18:26:38 +01:00
Gael Guennebaud
902750826b Add support for dense.cwiseProduct(sparse)
This also fixes a regression regarding (dense*sparse).diagonal()
2015-11-04 17:42:07 +01:00
Gael Guennebaud
f6b1deebab Fix compilation of sparse-triangular to dense assignment 2015-11-04 17:02:32 +01:00
Alexandre Avenel
d46e2c10a6 Add round, ceil and floor for SSE4.1/AVX (Bug #70) 2015-11-01 10:49:27 +01:00
Gael Guennebaud
5a2007f7e4 typo 2015-10-30 22:16:23 +01:00
Gael Guennebaud
8a3151de2e Limit matrix size for other eigen and schur decompositions 2015-10-30 18:06:03 +01:00
Gael Guennebaud
fdf3030ff8 Limit matrix sizes for trmm unit test and complexes. 2015-10-30 15:07:50 +01:00
Gael Guennebaud
9285647dfe Limit matrix size when testing for NaN: they can become prohibitively expensive when running on x87 fp unit 2015-10-30 14:44:22 +01:00
Gael Guennebaud
213bd0253a Fix gcc 4.4 compilation issue 2015-10-30 08:44:37 +01:00
Gael Guennebaud
5b6cff5b0e fix typo 2015-10-28 20:18:00 +01:00
Gael Guennebaud
28ddb5158d Enable std::isfinite/nan/inf on MSVC 2013 and newer and clang. Fix isinf for gcc4.4 and older msvc with fast-math. 2015-10-28 16:27:20 +01:00
Gael Guennebaud
1f11dd6ced Add a unit test for large chains of products 2015-10-28 12:53:13 +01:00
Gael Guennebaud
902c2db5a5 Extend vectorwiseop unit test with column/row vectors as input. 2015-10-28 11:59:20 +01:00
Gael Guennebaud
77ff3386b7 Refactoring of the cost model:
- Dynamic is now an invalid value
 - introduce a HugeCost constant to be used for runtime-cost values or arbitrarily huge cost
 - add sanity checks for cost values: must be >=0 and not too large
This change provides several benefits:
 - it fixes shortcoming is some cost computation where the Dynamic case was not properly handled.
 - it simplifies cost computation logic, and should avoid future similar shortcomings.
 - it allows to distinguish between different level of dynamic/huge/infinite cost
 - it should enable further simplifications in the computation of costs (save compilation time)
2015-10-28 11:42:14 +01:00
Gael Guennebaud
827d8a9bad Fix false negative in redux test 2015-10-27 21:37:03 +01:00
Gael Guennebaud
946f8850e8 bug #1008: add a unit test for fast-math mode and isinf/isnan/isfinite/etc. functions. 2015-10-27 16:44:45 +01:00
Gael Guennebaud
699c33e76a merge 2015-10-27 11:10:11 +01:00
Gael Guennebaud
73f692d16b Fix ambiguous instantiation 2015-10-27 11:01:37 +01:00
Gael Guennebaud
0fc8954282 Improve readibility of EIGEN_DEBUG_ASSIGN mode. 2015-10-27 10:38:49 +01:00
Gael Guennebaud
e6f8c5c325 Add support to directly evaluate the product of two sparse matrices within a dense matrix. 2015-10-26 18:20:00 +01:00
Gael Guennebaud
a5324a131f bug #1092: fix iterative solver ctors for expressions as input 2015-10-26 16:16:24 +01:00
Gael Guennebaud
f93654ae16 bug #1098: fix regression introduced when generalizing some compute() methods in changeset 7031a851d4
.
2015-10-26 16:00:25 +01:00
Gael Guennebaud
4704bdc9c0 Make the IterativeLinearSolvers module compatible with MPL2-only mode
by defaulting to COLAMDOrdering and NaturalOrdering for ILUT and ILLT respectively.
2015-10-26 15:17:52 +01:00
Gael Guennebaud
8a211bb1a9 bug #1088: fix setIdenity for non-compressed sparse-matrix 2015-10-25 22:01:58 +01:00
Gael Guennebaud
54b23cce16 Switch to MPL2 2015-10-23 10:36:33 +02:00
Gael Guennebaud
71b473aab1 Remove invalid typename keyword 2015-10-22 21:58:18 +02:00
Gael Guennebaud
e78bc111f1 bug #1090: fix a shortcoming in redux logic for which slice-vectorization plus unrolling might happen. 2015-10-21 20:58:33 +02:00
Gael Guennebaud
8961265889 bug #1064: add support for Ref<SparseVector> 2015-10-21 09:47:43 +02:00
Gael Guennebaud
c0adf6e38d Fix perm*sparse return type and nesting, and add several sanity checks for perm*sparse 2015-10-14 10:16:48 +02:00
Gael Guennebaud
b4c79ee1d3 Update custom setFromTripplets API to allow passing a functor object, and add a collapseDuplicates method to cleanup the API. Also add respective unit test 2015-10-13 11:30:41 +02:00
Gael Guennebaud
a44d91a0b2 extend unit test for SparseMatrix::prune 2015-10-13 10:53:38 +02:00
Gael Guennebaud
ea9749fd6c Fix packetmath unit test for pdiv not being always defined 2015-10-13 09:53:46 +02:00