Commit Graph

6341 Commits (4a854f7e22dbcf9eacedf99a108c274d6283f1aa)

Author SHA1 Message Date
dellaert 4a854f7e22 No using namespace in headers 2014-10-15 11:01:27 +02:00
dellaert 898c06ccbb New multi-threaded, realistic SFM example (1M factors, not 1M calls on same factor) 2014-10-15 11:01:02 +02:00
dellaert 79ff0c54f9 createUnknowns 2014-10-15 10:38:54 +02:00
dellaert 00d0a7b045 Merge branch 'feature/BAD_stackAb' into feature/BAD 2014-10-15 01:20:01 +02:00
dellaert 9b1c9bbf37 Allocate temporary matrix on the stack rather tahn on heap, and give VerticalBlockMatrix a view on it. 2014-10-15 00:56:06 +02:00
dellaert c88b2a5902 Fixed bizarre link erro as well as off-by-1 bug 2014-10-15 00:34:28 +02:00
dellaert 0f055f7910 Pass matrix to VerticalBlockMatrix constructor 2014-10-15 00:28:53 +02:00
dellaert 2092705d12 Allow for other Eigen matrix types 2014-10-15 00:27:43 +02:00
dellaert 625b939b66 Another very significant speed-up of reverseAD pipeline, by template specialization of the leaf case for fixed matrices. Unfortunately, while this sped up reverse AD for our SFM kernel by 300%, reverseAD was only 6%, and is now 2% of total time. So, time to look elsewhere.
Oh, and, it is clear that the Identity matrix for Leaf only expressions is completely known at compile time: Eigen::Matrix<double, T::dimension, T::dimension>::Identity(). That should nicely speed up many a PriorFactor (replacement).
2014-10-14 23:40:21 +02:00
dellaert 4894dccf5b Merge branch 'feature/BAD_linearize' into feature/BAD: Now awesome performance!
In this I branch essentially implemented two things
1) I used template-meta-programming to automate adding more functional nodes
2) I overloaded "linearize" so that now reverse AD writes to Eigen::Block<Matrix> views of the VerticalBlockMatrix that will be passed to the JacobianFacor. This did wonders for performance, making the AD pipeline faster than dedicated factors. Because the latter is based on optional<Matrix> references, they cannot apply the same trick :-(
3) Finally, I removed the forward AD pipeline. Not worth keeping (this implementation) alive.
2014-10-14 18:05:59 +02:00
dellaert baaeaacabe Made dimensions constant property. Now performance is ***blazing***, way past custom factors. 2014-10-14 17:46:57 +02:00
dellaert c971207abf Switched to vector for dimensions 2014-10-14 17:16:31 +02:00
dellaert 1c3f328fb2 Successful switch to Blocks ! 2014-10-14 15:43:41 +02:00
dellaert f3e1561105 Prepare VerticalBlockMatrix for filling 2014-10-14 11:13:49 +02:00
dellaert 027759300d size_t argument for check 2014-10-14 11:13:09 +02:00
dellaert 4c76f39009 Now uses dimensions 2014-10-14 09:55:34 +02:00
dellaert d8d94d0c34 dimensions implemented and tested 2014-10-14 09:53:47 +02:00
dellaert 781cc6daa9 keys now from expression_ 2014-10-14 08:59:01 +02:00
dellaert 0a41b0a027 Moved meta-programming tests to testExpressionMeta.cpp 2014-10-14 08:53:16 +02:00
dellaert ef5bf03c81 Clean up 2014-10-13 23:04:30 +02:00
dellaert 70f0caf0e3 Experimenting w Fusion 2014-10-13 22:50:47 +02:00
dellaert dda91df6e1 On the way to full fusion: Optional meta-function now separate from Jacobian. 2014-10-13 18:32:58 +02:00
dellaert ba0b68110f Boost Fusion needed to access values :-( 2014-10-13 13:56:51 +02:00
dellaert a52ff52941 Try some meta-transforms 2014-10-13 13:34:00 +02:00
dellaert 1c1695353e Now we can apply ExecutionTrace and Expression as meta-functions 2014-10-13 13:04:37 +02:00
dellaert c11d7885e1 Comments 2014-10-13 11:55:16 +02:00
dellaert 74269902d7 Big collapse now realized all the way through 2014-10-13 11:37:47 +02:00
dellaert da0e5fe52f The great collapse: instead of two recursively defined classes, there is now only one. The Record class is now a (recursive) inner class. 2014-10-13 10:50:05 +02:00
dellaert bc9e11f43c Pre-big collapse: prototype recursively defined inner Record2 type 2014-10-13 10:10:46 +02:00
dellaert 7fde47c48b No more JacobianTA typedefs -> all use Jacobian<T,A> now. 2014-10-13 09:25:06 +02:00
dellaert 7848d74928 Detailed explanation of recursive class composition pattern.
Jacobian type now defined in argument.
2014-10-13 08:49:12 +02:00
dellaert 7f621af54a Fixed bug 2014-10-13 00:57:11 +02:00
dellaert 2e8d868cd2 keys have been implemented 2014-10-13 00:37:46 +02:00
dellaert a9d9fcd241 FunctionalNode inherited for all three functional ExpressionNode sub-classes 2014-10-13 00:31:03 +02:00
dellaert 8100d89094 So much better as methods 2014-10-12 23:57:08 +02:00
dellaert 55cc4ba56c Switched names of fold result and meta-function that is folded over 2014-10-12 23:31:58 +02:00
dellaert ef21a4ba4a Major re-org in preparation of recursive Functional nodes 2014-10-12 23:03:33 +02:00
dellaert 408be628d2 Small change in meta-programming, big improvement in clarity 2014-10-12 22:17:21 +02:00
dellaert 107bcd8bb4 Going forwards, we default to reverse :-) 2014-10-12 22:04:40 +02:00
dellaert 4d1eb05c7d Passing JacobianMap as an argument now.. 2014-10-12 20:16:08 +02:00
dellaert dc541f1051 made traceSize an instance variable 2014-10-12 18:52:12 +02:00
dellaert 7a5f48f6dd Fixed typo in assert 2014-10-12 12:20:12 +02:00
dellaert fea2eb0b5f Inlined VerticalBlockMatrix construction 2014-10-12 11:05:43 +02:00
dellaert ed62271f81 Dealing with constrained noise model 2014-10-12 10:52:07 +02:00
dellaert 86d3e559e6 Merge branch 'feature/BAD' into feature/BAD_linearize 2014-10-11 23:07:40 +02:00
dellaert c9f80536c0 Added a constraint model 2014-10-11 23:07:23 +02:00
dellaert e46a8b05eb Some mode readable matrix types 2014-10-11 23:06:57 +02:00
dellaert 3c6f7a42e6 Merge branch 'feature/BAD' into feature/BAD_linearize: easier trace/dTdA access 2014-10-11 22:31:43 +02:00
dellaert c776e87f78 Refactoring for readability/sanity 2014-10-11 21:33:07 +02:00
dellaert 0c7ea68f2f Now overwriting linearize as preparation for direct VericalBlockMatrix 2014-10-11 17:05:53 +02:00