Add an ExecutionSummary object that the Evaluator and LinearSolver can use to report execution statistics of all kinds. Currently a single map which maps arbitrary strings to doubles is supported, which allows for precise timing information to be communicated. Change-Id: Ibd930aca5c9e6cae89bcfeffe9b13e2887644881
diff --git a/internal/ceres/evaluator.h b/internal/ceres/evaluator.h index 3bbf50a..f3be38c 100644 --- a/internal/ceres/evaluator.h +++ b/internal/ceres/evaluator.h
@@ -34,6 +34,8 @@ #include <string> #include <vector> + +#include "ceres/execution_summary.h" #include "ceres/internal/port.h" #include "ceres/types.h" @@ -152,6 +154,8 @@ // The number of residuals in the optimization problem. virtual int NumResiduals() const = 0; + + virtual ExecutionSummary ExecutionSummary() const { return ExecutionSummary(); } }; } // namespace internal
diff --git a/internal/ceres/execution_summary.h b/internal/ceres/execution_summary.h new file mode 100644 index 0000000..02a4448 --- /dev/null +++ b/internal/ceres/execution_summary.h
@@ -0,0 +1,52 @@ +// Ceres Solver - A fast non-linear least squares minimizer +// Copyright 2013 Google Inc. All rights reserved. +// http://code.google.com/p/ceres-solver/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of Google Inc. nor the names of its contributors may be +// used to endorse or promote products derived from this software without +// specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +// Author: sameeragarwal@google.com (Sameer Agarwal) + +#ifndef CERES_INTERNAL_EXECUTION_SUMMARY_H_ +#define CERES_INTERNAL_EXECUTION_SUMMARY_H_ + +#include <map> +#include <string> + +#include "ceres/internal/port.h" + +namespace ceres { +namespace internal { + +// Struct used by various objects to report statistics and other +// information about their execution. e.g., ExecutionSummary::times +// can be used for reporting times associated with various activities. +struct ExecutionSummary { + map<string, double> times; +}; + +} // namespace internal +} // namespace ceres + +#endif // CERES_INTERNAL_EXECUTION_SUMMARY_H_
diff --git a/internal/ceres/linear_solver.h b/internal/ceres/linear_solver.h index ee7fce2..6e03f60 100644 --- a/internal/ceres/linear_solver.h +++ b/internal/ceres/linear_solver.h
@@ -42,6 +42,7 @@ #include "ceres/casts.h" #include "ceres/compressed_row_sparse_matrix.h" #include "ceres/dense_sparse_matrix.h" +#include "ceres/execution_summary.h" #include "ceres/triplet_sparse_matrix.h" #include "ceres/types.h" @@ -255,6 +256,8 @@ const PerSolveOptions& per_solve_options, double* x) = 0; + virtual const ExecutionSummary ExecutionSummary() const { return ExecutionSummary(); } + // Factory static LinearSolver* Create(const Options& options); };