TAF: Transformation of Algorithms in C++


TAC++ is a source-to-source translator for C(++) code, i.e. TAC++ accepts C(++) code as input, applies a semantic transformation, and generates C(++) code as output. The generated code can operate in forward or reverse mode (tangent linear or adjoint model). TAC++ can generate code to evaluate Jacobian times vector products or the full Jacobian. Higher order derivative code is generated by applying TAC++ multiple times. TAC++ transfers the well proven design concepts for our AD tool TAF to C(++).


TAC++ normalises the code and applies a control flow analysis. TAC++ applies an interprocedural data flow analysis. Given the independent and dependent variables of the specified top-level routine, TAC++ then determines all active routines and variables and produces derivative code only for those.
TAC++ accepts several kinds of directives. Currently these directives are used to support the tool's code analysis. Inclusion of directives that trigger generation of storing/reading schemes for required values is in progress.
TAC++ generated code is structured an well readable.


See an overview and a list of references for some of the first TAC++ applications.

Download example of TAC++ generated code for a Monte Carlo simulation in computational finance (LIBOR market model). Original model code and hand-coded tangent and adjoint by Mike Giles are available here .


TAC++ is a commercial product. Contact us to obtain a TAC++ licence.

Copyright © FastOpt - all rights reserved