Documentation for timing.h
parent
6d288a193d
commit
3ff205b829
|
|
@ -24,6 +24,84 @@
|
||||||
#include <gtsam/global_includes.h>
|
#include <gtsam/global_includes.h>
|
||||||
#include <gtsam/base/FastMap.h>
|
#include <gtsam/base/FastMap.h>
|
||||||
|
|
||||||
|
// This file contains the GTSAM timing instrumentation library, a low-overhead method for
|
||||||
|
// learning at a medium-fine level how much time various components of an algorithm take
|
||||||
|
// in CPU and wall time.
|
||||||
|
//
|
||||||
|
// The output of this instrumentation is a call-tree-like printout containing statistics
|
||||||
|
// about each instrumented code block. To print this output at any time, call
|
||||||
|
// tictoc_print() or tictoc_print_().
|
||||||
|
//
|
||||||
|
// An overall point to be aware of is that there are two versions of each function - one
|
||||||
|
// ending in an underscore '_' and one without the trailing underscore. The underscore
|
||||||
|
// versions always are active, but the versions without an underscore are active only when
|
||||||
|
// GTSAM_ENABLE_TIMING is defined (automatically defined in our CMake Timing build type).
|
||||||
|
// GTSAM algorithms are all instrumented with the non-underscore versions, so generally
|
||||||
|
// you should use the underscore versions in your own code to leave out the GTSAM detail.
|
||||||
|
//
|
||||||
|
// gttic and gttoc start and stop a timed section, respectively. gttic creates a *scoped*
|
||||||
|
// object - when it goes out of scope gttoc is called automatically. Thus, you do not
|
||||||
|
// need to call gttoc if you are timing an entire function (see basic use examples below).
|
||||||
|
// However, you must be *aware* of this scoped nature - putting gttic inside of an if(...)
|
||||||
|
// block, for example, will only time code until the closing brace '}'. See advanced
|
||||||
|
// usage below if you need to avoid this.
|
||||||
|
//
|
||||||
|
// Multiple calls nest automatically - each gttic nests under the previous gttic called
|
||||||
|
// for which gttoc has not been called (or the previous gttic did not go out of scope).
|
||||||
|
//
|
||||||
|
// Basic usage examples are as follows:
|
||||||
|
//
|
||||||
|
// - Timing an entire function:
|
||||||
|
// void myFunction() {
|
||||||
|
// gttic_(myFunction);
|
||||||
|
// ........
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// - Timing an entire function as well as its component parts:
|
||||||
|
// void myLongFunction() {
|
||||||
|
// gttic_(myLongFunction);
|
||||||
|
// gttic_(step1); // Will nest under the 'myLongFunction' label
|
||||||
|
// ........
|
||||||
|
// gttoc_(step1);
|
||||||
|
// gttic_(step2); // Will nest under the 'myLongFunction' label
|
||||||
|
// ........
|
||||||
|
// gttoc_(step2);
|
||||||
|
// ........
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// - Timing functions calling/called by other functions:
|
||||||
|
// void oneStep() {
|
||||||
|
// gttic_(oneStep); // Will automatically nest under the gttic label of the calling function
|
||||||
|
// .......
|
||||||
|
// }
|
||||||
|
// void algorithm() {
|
||||||
|
// gttic_(algorithm);
|
||||||
|
// oneStep(); // gttic's inside this function will automatically nest inside our 'algorithm' label
|
||||||
|
// twoStep(); // gttic's inside this function will automatically nest inside our 'algorithm' label
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Advanced usage:
|
||||||
|
//
|
||||||
|
// - "Finishing iterations" - to get correct min/max times for each call, you must define
|
||||||
|
// in your code what constitutes an iteration. A single sum for the min/max times is
|
||||||
|
// accumulated within each iteration. If you don't care about min/max times, you don't
|
||||||
|
// need to worry about this. For example:
|
||||||
|
// void myOuterLoop() {
|
||||||
|
// while(true) {
|
||||||
|
// iterateMyAlgorithm();
|
||||||
|
// tictoc_finishedIteration_();
|
||||||
|
// tictoc_print_(); // Optional
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// - Stopping timing a section in a different scope than it is started. Normally, a gttoc
|
||||||
|
// statement goes out of scope at end of C++ scope. However, you can use longtic and
|
||||||
|
// longtoc to start and stop timing with the specified label at any point, without regard
|
||||||
|
// too scope. Note that if you use these, it may become difficult to ensure that you
|
||||||
|
// have matching gttic/gttoc statments. You may want to consider reorganizing your timing
|
||||||
|
// outline to match the scope of your code.
|
||||||
|
|
||||||
// Automatically use the new Boost timers if version is recent enough.
|
// Automatically use the new Boost timers if version is recent enough.
|
||||||
#if BOOST_VERSION >= 104800
|
#if BOOST_VERSION >= 104800
|
||||||
# ifndef GTSAM_DISABLE_NEW_TIMERS
|
# ifndef GTSAM_DISABLE_NEW_TIMERS
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue