TAC++: Transformation of Algorithms in C++

Overview of Applications:


Model Model Reference Lines Language Main Loop TLM ADM comment HES AD References
LIBOR Brace et al. (1997) approx. 100 C - 5.4/80 3.7 - - Giles (2007)
Two-stream Pinty et al. (2006) approx. 330 C - 1.7 3.8 - 23/7 Lavergne et al. (2006), Pinty et al. (2007)
ROF (Computer Vision) Pock et al. (2007) approx. 60 C - 1.6 1.9 - - Pock et al. (2007)
TAUij (1 core routine) Gerhold (2005) 130 C - - 2.3 - - Voßbeck et al. (2008)
EULSOLDO Cusdin and Müller (2003) 140 C - 2.2 3.2 - - Voßbeck et al. ( 2004 , 2008 )

Lines
# of C++ source code lines with comments and blank lines removed.
Main Loop
Describes the main time integration loop, if any.
  • steady state: converges to a steady state
  • evolving: integrates a system forward in time
TLM
Column TLM shows CPU time for evaluating function (model) plus first derivative in forward mode (tangent linear model, TLM) in multiples of the CPU time to evaluate the function only (CPU time ratio).

In most of the applications the TLM computes the product of Jacobian times one vector. Whereever there is more than one vector we print: CPU time ratio / # of vectors.

The entry "Yes" means that there is a TLM, but we don't have the performance, whereas "-" means that there is no TLM.

ADM
Column ADM shows CPU time for evaluating function (model) plus first derivative in reverse mode (adjoint model, ADM) in multiples of the CPU time to evaluate the function only (CPU time ratio).

In all examples the CPU time for the derivative of a scalar valued function is given.

Note that a 2 level checkpointing scheme (see, e.g. Giering and Kaminski, 2002) consumes the CPU time of about one additional function evaluation. For example the adjoint of IMBETHY has a CPU time ratio of about 3.6 - 1 = 2.6 for short integrations, which do not require a checkpointing scheme. 3 level checkpointing costs two additional function evaluations.

comment
Comments on the selected strategy to increase the performance:
  • iteration directive: arranges memory efficient handling for integrations that converge to a steady state.
  • flow directive: are used to provide information about routines the source code of which is either not available or shall not be differentiated. TAC++ generates the interfaces to derivative code provided by the user. Self adjoint routines are an example for which it is more efficient to provide the derivative (the routine itself) instead of having TAC++ generate the adjoint.
  • checkpointing: A scheme to allow multiple use of tape space at the cost of additional function evaluations. Generation of such a scheme can be triggered by TAC++ directives (see e.g. Giering and Kaminski, 2002)
HES
Column HES shows CPU time for evaluating columns of the Hessian (second derivative) in multiples of the CPU time for evaluating the function (CPU time ratio).

If the number of columns is not equal one, we print: CPU time ratio / # of columns.

"-" means that there is no Hessian code.

Copyright © FastOpt - all rights reserved