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