AAD-C(patent pending) is a novel approach to implement automatic adjoint differentiation of C++ programs with focus on computations where derivatives are required for multiple instances of input data. It combines easy to integrate Operator Overloading techniques and beats the efficiency of code transformation. Automatic vectorization and our unique approach allows to achieve performance unseen before. Order of 50 times speed up compared to single valuation of the original function. I.e. for just 2% of the original code execution time you get values of the base algorithm and all its derivatives.
Very large computations are possible. Efficient memory use for the original algorithm and adjoint version.
Take full advantage of AVX2 or AVX512 native CPU vectorization
Output functions are safe to execute in parallel even when the original code is not.
Support for all modern AAD features, such as external functions and check-pointing.
No template expressions. Unique active type allows to reuse in-memory objects for AAD.
Automatically tested on multiple platforms/compilers using rich set of test cases