Publication: Hybrid approaches to adjoint code generation with dco/c++
Introduction
Applications
Tools
Research Groups
Workshops
Publications
   List Publications
   Advanced Search
   Info
   Add Publications
My Account
About
Impress

Hybrid approaches to adjoint code generation with dco/c++

- Ph.D. thesis -
 

Author(s)
Johannes Lotz

Year
2016

Abstract
This dissertation is concerned with the computation of arbitrary-order derivative projections (tangents and adjoints) of numerical simulation programs written in C++. Thanks to the increasing computational power, simulation nowadays plays a fundamental role within a wide range of applications. On this basis, in the last decades simulation programs became the foundation for optimization problems in a wide variety of domains, e.g. design optimization in computational fluid dynamics. When using derivative-based algorithms to carry out the optimization, first- and higher-order sensitivities of the underlying simulation program are required. Since in many cases gradients of scalar objective functions need to be computed, the adjoint method should be used. Adjoint programs can either be written by hand or generated by Algorithmic (or Automatic) Differentiation (ad) tools. ad is a semantic program transformation exploiting the chain rule of differential calculus to automatically generate programs such that sensitivities are computed in addition to the original function values. Writing adjoint programs by hand can be a tedious, time-consuming, and error-prone task, but on the other hand, the well-versed programmer can possibly write much more efficient code, especially when exploiting mathematical properties by symbolic transformations. When hand-coding an adjoint simulation program, an incremental software development process is difficult. To achieve an effective development process and get an efficient program, hybridization techniques can be used to couple an ad tool with hand-written code. This makes a top-down adjoint code development possible -- beginning with a pure ad solution, going step by step to a more efficient implementation.This thesis consists of three main points. First, the software dco/c++ is presented. dco/c++ implements ad by overloading in C++ and features hybridization techniques in a flexible and efficient way. Flexibility is meant in terms of compliance with a modern C++ environment (e.g. generic concepts, exception-safety, thread-safety, or portability), and in terms of a convenient interface with emphasis on the support for arbitrary-order derivatives. Efficiency on the other hand is ensured by the newly developed ad test suite, which carries out performance tests also in comparison to other ad tools.As the second main point, arbitrary-order derivative projections of common numerical algorithms like linear and nonlinear solvers are derived symbolically, exploiting mathematical properties. Those results are shown to be of practical relevance by connecting them to the hybridization capabilities of dco/c++. This combination is presented with the help of an extensive case study demonstrating the effectiveness of the approach. In addition, dco/c++ was successfully used in many projects and its applicability is therefore shown in terms of reference projects. When using ad to generate an adjoint program, the resulting executable typically requires a huge amount of memory. The third point of this thesis therefore covers the Call Tree Reversal (CTR) problem. CTR is a checkpointing technique, which allows for a tradeoff between additional runtime and memory requirements. The problem itself is an NP-complete optimization problem, which in this thesis is approached by a mixed integer programming formulation for the first time.

AD Tools
dco/c++

AD Theory and Techniques
Checkpointing, Hierarchical Approach, Integration of Analytic Derivatives

BibTeX
@PHDTHESIS{
         Lotz2016Hat,
       type = "Dissertation",
       url = "http://publications.rwth-aachen.de/record/667318",
       author = "Lotz, Johannes",
       title = "Hybrid approaches to adjoint code generation with dco/c++",
       school = "Department of Computer Science, RWTH Aachen University",
       year = "2016",
       abstract = "This dissertation is concerned with the computation of arbitrary-order derivative
         projections (tangents and adjoints) of numerical simulation programs written in C++. Thanks to the
         increasing computational power, simulation nowadays plays a fundamental role within a wide range of
         applications. On this basis, in the last decades simulation programs became the foundation for
         optimization problems in a wide variety of domains, e.g. design optimization in computational fluid
         dynamics. When using derivative-based algorithms to carry out the optimization, first- and
         higher-order sensitivities of the underlying simulation program are required. Since in many cases
         gradients of scalar objective functions need to be computed, the adjoint method should be used.
         Adjoint programs can either be written by hand or generated by Algorithmic (or Automatic)
         Differentiation (AD) tools. AD is a semantic program transformation exploiting the chain rule of
         differential calculus to automatically generate programs such that sensitivities are computed in
         addition to the original function values. Writing adjoint programs by hand can be a tedious,
         time-consuming, and error-prone task, but on the other hand, the well-versed programmer can possibly
         write much more efficient code, especially when exploiting mathematical properties by symbolic
         transformations. When hand-coding an adjoint simulation program, an incremental software development
         process is difficult. To achieve an effective development process and get an efficient program,
         hybridization techniques can be used to couple an AD tool with hand-written code. This makes a
         top-down adjoint code development possible -- beginning with a pure AD solution, going step by step
         to a more efficient implementation.This thesis consists of three main points. First, the software
         dco/c++ is presented. dco/c++ implements AD by overloading in C++ and features hybridization
         techniques in a flexible and efficient way. Flexibility is meant in terms of compliance with a
         modern C++ environment (e.g. generic concepts, exception-safety, thread-safety, or portability), and
         in terms of a convenient interface with emphasis on the support for arbitrary-order derivatives.
         Efficiency on the other hand is ensured by the newly developed AD test suite, which carries out
         performance tests also in comparison to other AD tools.As the second main point, arbitrary-order
         derivative projections of common numerical algorithms like linear and nonlinear solvers are derived
         symbolically, exploiting mathematical properties. Those results are shown to be of practical
         relevance by connecting them to the hybridization capabilities of dco/c++. This combination is
         presented with the help of an extensive case study demonstrating the effectiveness of the approach.
         In addition, dco/c++ was successfully used in many projects and its applicability is therefore shown
         in terms of reference projects. When using AD to generate an adjoint program, the resulting
         executable typically requires a huge amount of memory. The third point of this thesis therefore
         covers the Call Tree Reversal (CTR) problem. CTR is a checkpointing technique, which allows for a
         tradeoff between additional runtime and memory requirements. The problem itself is an NP-complete
         optimization problem, which in this thesis is approached by a mixed integer programming formulation
         for the first time.",
       ad_tools = "dco/c++",
       ad_theotech = "Checkpointing, Hierarchical Approach, Integration of Analytic Derivatives"
}


back
  

Contact:
autodiff.org
Username:
Password:
(lost password)