[eigen] merged refactor_solve_api |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen <eigen@xxxxxxxxxxxxxxxxxxx>
- Subject: [eigen] merged refactor_solve_api
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Mon, 9 Nov 2009 13:37:23 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=/okmQLPUWG9b8yy5gakWUtMQEx3WLh1O6Cz+Nr8uEvM=; b=hb12ro+8TA39/UxdYVFCfQTB4SRfgSM9hFtcXEkx+rEjw7ZTHmObcYqvJHrJUkYY/a jHa5cxnV9F/mbkU2a9Wx5dSdDEoEePHgy3ijLGP5t3CJHNpuGFHSk2hUey9Pm3DOXXcs E6etL2whkYKBZKc/4PVHcmToiqxkG2AnhfRyw=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=I8yG6F8TVD/n6y+3yxOBXn7arjhro8EZWPhsqsd+6YYx6aNRFd5w5YVE1eWymftm7Q rW51n4OYI5lwPQB1+6942WjopKByX6osC7eKWdDJGOSl+9XsMN/qdb2QGDoMLE4JXfL7 ORG2h+DJG6SYi4z7BXoUBwmbnYXzyupCwUe3Q=
Hi,
I just merged my fork. Here is a summary of the main changes.
1) API changes in solve() methods in all decompositions
Instead of doing:
decomposition.solve(rhs,&result);
you now do:
result = decomposition.solve(rhs);
As discussed earlier, this is implemented in a way that does not incur
any overhead. The return value of solve() is an expression like any
other, the only limitation is that you cannot address its coefficients
individually.
2) More changes in LU module:
2a) Same as above for kernel() and image()
2b) As discussed earlier: LU no longer tries to detect non-full rank
and terminate early, instead it behaves like LAPACK, continuing the
decomposition until an exacly zero pivot is met. Rank-determining
methods such as rank() and isInvertible() are now computing themselves
how many pivots are bigger than the "threshold" which you can control
using setThreshold(). This is much saner than what we did, much closer
to LAPACK (but more powerful as we do rank determination with custom
threshold), much more suitable for a uniform API across decompositions
(the same is coming in QR, SVD, and eigensolvers) and allows the
unit-tests to always succeed, even with 1000 repetitions!
2c) Inversion of tiny matrices: merged the 4x4 fixes, and found the
"right" API for tiny-inverse-with-check: the user can pass the
threshold to check the absolute value of the determinant against.
3) Changes in tests build system: as discussed earlier, tests are now
split into smaller executables by default (you can set that to OFF to
get the old behavior). The benefits are that this takes far less
memory, allowing to launch concurrent build jobs easily, and that you
can benefit from a parallel build even when building only 1 test. See
tests source files for how this is done, basically just replace
CALL_SUBTEST by CALL_SUBTEST_i to create a channel i, where i can
currently be any integer between 1 and 16; and if needed you can check
for the preprocessor symbol EIGEN_TEST_PART_i which also creates the
corresponding channel. You don't need to change anything in the
CMakeLists.
Benoit