Argonne National Laboratory

Interfacing Source Transformation AD with Operator Overloading Libraries

TitleInterfacing Source Transformation AD with Operator Overloading Libraries
Publication TypeReport
Year of Publication2016
AuthorsKulshreshtha, K, Narayanan, SHK
AbstractScienti c applications are usually written in a single language such as C, C++, or a avor of Fortran. Various algorithmic di erentiation (AD) tools exist to di erentiate these applications by using source transformation [1, 2, 3, 4] or operator-overloading [5, 6]. The language that an application is written in often dictates the approach and tool to be used for di erentiation. Additionally, performance considerations, tool philosophy (recomputation vs. storage), and speci c tool capabilities such as support for sparse Jacobians or xed-point iterations may play a role in the tool that is ultimately used to di erentiate an application. Operator overloading and source transformation have their own strengths and weaknesses. The most important feature of operator-overloading-based AD tools is that they can be used in software regardless of its design complexity. Many large simulation tools (e.g., ISSM [7], SU2 [8, 9]) have been successfully di erentiated in this manner. One drawback, however, is the large amount of memory required to store the tool-speci c internal representation of the computation in order to run it in the reverse mode. The execution speed also su ers because of low compiler optimization potential. Both problems do not occur in source transformation tools. However, such tools cannot handle runtime features of C++ such as object inheritance, polymorphism, and templating.