Adjoint Code Design Patterns

Uwe Naumann, Jonathan Hüser

Oct 09, 2017 (modified: Oct 09, 2017) NIPS 2017 Workshop Autodiff Submission readers: everyone
  • Abstract: Adjoint methods have become fundamental ingredients of the scientific computing toolbox over the past decades. Large-scale parameter sensitivity analysis, uncertainty quantification and nonlinear optimization as well as modern approaches to deep learning would otherwise turn out computationally infeasible. For nontrivial real-world problems the algorithmic derivation of adjoint numerical simulation programs quickly becomes a highly complex software engineering task requiring expertise in software analysis, transformation and optimization. Despite rather mature software tool support for algorithmic differentiation substantial user intervention is typically required. A large number of patterns shared by numerous application codes results in repeated duplication of development effort. The adjoint code design patterns discussed in this talk aim to reduce this problem through improved formalization from the software engineering perspective.
  • TL;DR: We propose design patterns for engineering adjoint code
  • Keywords: adjoint, design pattern, C++