Skip to content

Commit

Permalink
[SymForce] Explicit instantiations for opt
Browse files Browse the repository at this point in the history
A number of classes either didn't have explicit instantiation
declarations (but did have explicit instantiations) or any explicit
isntantiation at all.

To improve compilation speeds (in theory) I've added explicit instations
and declarations.

Classes which don't have explicit instations:
- LevenberMarquardtSolver
- OptimizationStats

Topic: more_explicit_instantiations_in_opt
GitOrigin-RevId: b6ba96ddc56dd5052a846bbb03c8f51495ca0ca6
  • Loading branch information
bradley-solliday-skydio authored and aaron-skydio committed Feb 21, 2023
1 parent e37758d commit 596e3bc
Show file tree
Hide file tree
Showing 10 changed files with 70 additions and 0 deletions.
6 changes: 6 additions & 0 deletions symforce/opt/cholesky/sparse_cholesky_solver.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,9 @@ class SparseCholeskySolver {
// Include implementation, yay templates.
#define SYM_SPARSE_CHOLESKY_SOLVER_H
#include "./sparse_cholesky_solver.tcc"

// Explicit template instantiation declarations
extern template class sym::SparseCholeskySolver<Eigen::SparseMatrix<double>, Eigen::Upper>;
extern template class sym::SparseCholeskySolver<Eigen::SparseMatrix<double>, Eigen::Lower>;
extern template class sym::SparseCholeskySolver<Eigen::SparseMatrix<float>, Eigen::Upper>;
extern template class sym::SparseCholeskySolver<Eigen::SparseMatrix<float>, Eigen::Lower>;
4 changes: 4 additions & 0 deletions symforce/opt/factor.h
Original file line number Diff line number Diff line change
Expand Up @@ -337,3 +337,7 @@ std::ostream& operator<<(std::ostream& os, const sym::linearized_sparse_factorf_

// Template method implementations
#include "./factor.tcc"

// Explicit instantiation declarations
extern template class sym::Factor<double>;
extern template class sym::Factor<float>;
12 changes: 12 additions & 0 deletions symforce/opt/gnc_optimizer.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/* ----------------------------------------------------------------------------
* SymForce - Copyright 2022, Skydio, Inc.
* This source code is under the Apache 2.0 license found in the LICENSE file.
* ---------------------------------------------------------------------------- */

#include "./gnc_optimizer.h"

#include "./optimizer.h"

// Explicit instantiation
template class sym::GncOptimizer<sym::Optimizer<double>>;
template class sym::GncOptimizer<sym::Optimizer<float>>;
4 changes: 4 additions & 0 deletions symforce/opt/gnc_optimizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,7 @@ class GncOptimizer : public BaseOptimizerType {
};

} // namespace sym

// Explicit instantiation declarations
extern template class sym::GncOptimizer<sym::Optimizer<double>>;
extern template class sym::GncOptimizer<sym::Optimizer<float>>;
10 changes: 10 additions & 0 deletions symforce/opt/linearization.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* ----------------------------------------------------------------------------
* SymForce - Copyright 2022, Skydio, Inc.
* This source code is under the Apache 2.0 license found in the LICENSE file.
* ---------------------------------------------------------------------------- */

#include "./linearization.h"

// Explicit instantiation
template struct sym::Linearization<double>;
template struct sym::Linearization<float>;
4 changes: 4 additions & 0 deletions symforce/opt/linearization.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,3 +83,7 @@ using Linearizationd = Linearization<double>;
using Linearizationf = Linearization<float>;

} // namespace sym

// Explicit instantiation declarations
extern template struct sym::Linearization<double>;
extern template struct sym::Linearization<float>;
4 changes: 4 additions & 0 deletions symforce/opt/optimizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,3 +300,7 @@ optimizer_params_t DefaultOptimizerParams();
} // namespace sym

#include "./optimizer.tcc"

// Explicit instantiation declaration
extern template class sym::Optimizer<double>;
extern template class sym::Optimizer<float>;
10 changes: 10 additions & 0 deletions symforce/opt/sparse_schur_solver.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/* ----------------------------------------------------------------------------
* SymForce - Copyright 2022, Skydio, Inc.
* This source code is under the Apache 2.0 license found in the LICENSE file.
* ---------------------------------------------------------------------------- */

#include "./sparse_schur_solver.h"

// Explicit instantiation
template class sym::SparseSchurSolver<Eigen::SparseMatrix<double>>;
template class sym::SparseSchurSolver<Eigen::SparseMatrix<float>>;
7 changes: 7 additions & 0 deletions symforce/opt/sparse_schur_solver.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@

#pragma once

// Required by MetisSupport
#include <iostream>

#include <Eigen/Dense>
#include <Eigen/MetisSupport>
#include <Eigen/Sparse>
Expand Down Expand Up @@ -132,3 +135,7 @@ class SparseSchurSolver {
} // namespace sym

#include "./sparse_schur_solver.tcc"

// Explicit instantiation declaration
extern template class sym::SparseSchurSolver<Eigen::SparseMatrix<double>>;
extern template class sym::SparseSchurSolver<Eigen::SparseMatrix<float>>;
9 changes: 9 additions & 0 deletions symforce/opt/values.h
Original file line number Diff line number Diff line change
Expand Up @@ -275,3 +275,12 @@ std::ostream& operator<<(std::ostream& os, const Values<Scalar>& v);

// Template method implementations
#include "./values.tcc"

// Explicit instantiation declarations
extern template class sym::Values<double>;
extern template class sym::Values<float>;

extern template sym::Values<double> sym::Values<double>::Cast<double>() const;
extern template sym::Values<float> sym::Values<double>::Cast<float>() const;
extern template sym::Values<double> sym::Values<float>::Cast<double>() const;
extern template sym::Values<float> sym::Values<float>::Cast<float>() const;

0 comments on commit 596e3bc

Please sign in to comment.