Automatic differentiation (AD) tools mechanize the process of developing code for the computation of derivatives. AD avoids the inaccuracies inherent in numerical approximations. Furthermore, sophisticated AD algoirthms can often produce c ode that is more reliable and more efficient than code written by an expert programmer. ADIC is the first and only AD tool for C and C++ based on compiler technology. This compiler foundation makes possible analyses and optimizations not available in toos based on operator overloading. The earliest implementations of ADIC included support for ANSI C applications, ADIC 2.0 lverages EDG, a commercial C/C++ parser, to provide robust C++ differentiation support. Modern AD tools, including ADIC are implemented in a modular way, aiming to isolate language-dependent program analyses and semantic transformations. The component design leads to much higher implementation quality because the different components can be implemented by experts in each of the different domains involved. For example, a compiler expert can focus on parsing, canonicalizing, and unparising C and C++, while an expert in graph theory and algorithms can produce new differentiation modules without having to worry about the complexity of parsing and generating C++ code. Thsi separation of concerns was achieved through the use of language-independent program analysis interfaces (in collaboration with researcgers at Rice University) and a language-independent XML representation of the computational portions of programs (XAIF). In addition to improved robustness and faster development times, this design naturally enables the reuse of program analysis algorithms and differentiation modules in compiler-based AD tools for other languages. In fact, the analysis and differention components are used in both ADIC and the Open AD Fortran front-end (based on Rice's Open64 compiler.
To order this software or receive further information, please fill out the following request: Request Software
@misc{osti_1231213,
title = {Autyomatic Differentiation of C/C++, Version 00},
author = {Beata Winnicka, Boyana Norris},
abstractNote = {Automatic differentiation (AD) tools mechanize the process of developing code for the computation of derivatives. AD avoids the inaccuracies inherent in numerical approximations. Furthermore, sophisticated AD algoirthms can often produce c ode that is more reliable and more efficient than code written by an expert programmer. ADIC is the first and only AD tool for C and C++ based on compiler technology. This compiler foundation makes possible analyses and optimizations not available in toos based on operator overloading. The earliest implementations of ADIC included support for ANSI C applications, ADIC 2.0 lverages EDG, a commercial C/C++ parser, to provide robust C++ differentiation support. Modern AD tools, including ADIC are implemented in a modular way, aiming to isolate language-dependent program analyses and semantic transformations. The component design leads to much higher implementation quality because the different components can be implemented by experts in each of the different domains involved. For example, a compiler expert can focus on parsing, canonicalizing, and unparising C and C++, while an expert in graph theory and algorithms can produce new differentiation modules without having to worry about the complexity of parsing and generating C++ code. Thsi separation of concerns was achieved through the use of language-independent program analysis interfaces (in collaboration with researcgers at Rice University) and a language-independent XML representation of the computational portions of programs (XAIF). In addition to improved robustness and faster development times, this design naturally enables the reuse of program analysis algorithms and differentiation modules in compiler-based AD tools for other languages. In fact, the analysis and differention components are used in both ADIC and the Open AD Fortran front-end (based on Rice's Open64 compiler.},
doi = {},
url = {https://www.osti.gov/biblio/1231213},
year = {Mon Nov 14 00:00:00 EST 2005},
month = {Mon Nov 14 00:00:00 EST 2005},
note =
}