Context:
We created a new class MultiFrontalSolver designed to
- solve the same system multiple times - as is common in a nonlinear optimization loop. Other than the legacy
GaussianFactorGraph pipeline, this allocates all the memory in advance and is optimized for cache performance and avoiding mallocs.
- deal with changing damping parameter lambda without as little overhead as possible
- when TBB is not installed, it uses a newly created
TaskScheduler which provides parallel processing for the multifrontal elimination (bottom-up) and solve (top-down).
Dirty secret: Frank pinned the number of threads to be 0.75 * nr cores, for both TBB and Mixin. This is super-important for the TaskScheduler, as I think because Eigen also tries threads and get starved. This might make TBB look worse (as it might do that again).
Goal:
- Mixin (name for using TaskScheduler/ForestTraversal) beats TBB every time. Then we can eradicate TBB. This though means that the legacy GTSAM also has to use ForestTraversal. That would be awesome!
What's left:
Context:
We created a new class
MultiFrontalSolverdesigned toGaussianFactorGraphpipeline, this allocates all the memory in advance and is optimized for cache performance and avoiding mallocs.TaskSchedulerwhich provides parallel processing for the multifrontal elimination (bottom-up) and solve (top-down).Goal:
What's left: