Don't Unroll Adjoint: Differentiating SSA-Form Programs

10/18/2018
by   Michael Innes, et al.
0

This paper presents reverse-mode algorithmic differentiation (AD) based on source code transformation, in particular of the Static Single Assignment (SSA) form used by modern compilers. The approach can support control flow, nesting, mutation, recursion, data structures, higher-order functions, and other language constructs, and the output is given to an existing compiler to produce highly efficient differentiated code. Our implementation is a new AD tool for the Julia language, called Zygote, which presents high-level dynamic semantics while transparently compiling adjoint code under the hood. We discuss the benefits of this approach to both the usability and performance of AD tools.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
09/25/2018

Tangent: Automatic differentiation using source-code transformation for dynamically typed array programming

The need to efficiently calculate first- and higher-order derivatives of...
research
09/21/2017

High-Performance Derivative Computations using CoDiPack

There are several AD tools available, which all implement different stra...
research
04/13/2023

Fast And Automatic Floating Point Error Analysis With CHEF-FP

As we reach the limit of Moore's Law, researchers are exploring differen...
research
11/16/2020

A Modern Compiler for the French Tax Code

In France, income tax is computed from taxpayers' individual returns, us...
research
06/23/2021

Native Implementation of Mutable Value Semantics

Unrestricted mutation of shared state is a source of many well-known pro...
research
11/10/2016

Efficient Implementation of a Higher-Order Language with Built-In AD

We show that Automatic Differentiation (AD) operators can be provided in...
research
09/05/2022

Forward-Mode Automatic Differentiation of Compiled Programs

Algorithmic differentiation (AD) is a set of techniques that provide par...

Please sign up or login with your details

Forgot password? Click here to reset