Make the Evaluator statistics key strings consistent
We keep track of evaluator call and time statistics
via a hashmap containing magic strings. These strings
need to be consistent across the GradientProblemSolver
and Solver as the LineSearchMinimizer is used by both
of these solvers. Previously they were inconsistent
in a manner that GradientProblemSolver was not getting
information about the evaluation timing, and in the
process of fixing that I made it so that the TrustRegionMinimizer
when solving bounds constrained probelms will access/update
this information correctly.
So while I look for a more elegant solution, this CL
is meant to fix the inconsistency by making sure that the
same magic strings are used everywhere.
Change-Id: I120ca0bd1c2f77fde2db15edd9e33286a49dbae9
diff --git a/internal/ceres/gradient_problem_evaluator.h b/internal/ceres/gradient_problem_evaluator.h
index ca49c24..9ccd10e 100644
--- a/internal/ceres/gradient_problem_evaluator.h
+++ b/internal/ceres/gradient_problem_evaluator.h
@@ -57,11 +57,18 @@
SparseMatrix* jacobian) {
CHECK(jacobian == NULL);
ScopedExecutionTimer total_timer("Evaluator::Total", &execution_summary_);
+ // The reason we use Residual and Jacobian here even when we are
+ // only computing the cost and gradient has to do with the fact
+ // that the line search minimizer code is used by both the
+ // GradientProblemSolver and the main CeresSolver coder where the
+ // Evaluator evaluates the Jacobian, and these magic strings need
+ // to be consistent across the code base for the time accounting
+ // to work.
ScopedExecutionTimer call_type_timer(
- gradient == NULL ? "Evaluator::Cost" : "Evaluator::Gradient",
+ gradient == NULL ? "Evaluator::Residual" : "Evaluator::Jacobian",
&execution_summary_);
- execution_summary_.IncrementCall(gradient == NULL ? "Evaluator::Cost"
- : "Evaluator::Gradient");
+ execution_summary_.IncrementCall(gradient == NULL ? "Evaluator::Residual"
+ : "Evaluator::Jacobian");
return problem_.Evaluate(state, cost, gradient);
}
diff --git a/internal/ceres/gradient_problem_solver.cc b/internal/ceres/gradient_problem_solver.cc
index 478818b..ba36dd7 100644
--- a/internal/ceres/gradient_problem_solver.cc
+++ b/internal/ceres/gradient_problem_solver.cc
@@ -166,15 +166,15 @@
const std::map<string, double>& evaluator_time_statistics =
minimizer_options.evaluator->TimeStatistics();
summary->cost_evaluation_time_in_seconds =
- FindWithDefault(evaluator_time_statistics, "Evaluator::Cost", 0.0);
+ FindWithDefault(evaluator_time_statistics, "Evaluator::Residual", 0.0);
summary->gradient_evaluation_time_in_seconds =
- FindWithDefault(evaluator_time_statistics, "Evaluator::Gradient", 0.0);
+ FindWithDefault(evaluator_time_statistics, "Evaluator::Jacobian", 0.0);
const std::map<string, int>& evaluator_call_statistics =
minimizer_options.evaluator->CallStatistics();
summary->num_cost_evaluations =
- FindWithDefault(evaluator_call_statistics, "Evaluator::Cost", 0);
+ FindWithDefault(evaluator_call_statistics, "Evaluator::Residual", 0);
summary->num_gradient_evaluations =
- FindWithDefault(evaluator_call_statistics, "Evaluator::Gradient", 0);
+ FindWithDefault(evaluator_call_statistics, "Evaluator::Jacobian", 0);
summary->total_time_in_seconds = WallTimeInSeconds() - start_time;
}