DeepAI AI Chat
Log In Sign Up

Differentiate Everything with a Reversible Programming Language

by   Jin-Guo Liu, et al.

This paper considers the source-to-source automatic differentiation (AD) in a reversible language. We start by reviewing the limitations of traditional AD frameworks. To solve the issues in these frameworks, we developed a reversible eDSL NiLang in Julia that can differentiate a general program while being compatible with Julia's ecosystem. It empowers users the flexibility to tradeoff time, space, and energy so that one can use it to obtain gradients and Hessians ranging for elementary mathematical functions, sparse matrix operations, and linear algebra that are widely used in scientific programming. We demonstrate that a source-to-source AD framework can achieve the state-of-the-art performance by showing and benchmarking several examples. Finally, we will discuss the challenges that we face towards rigorous reversible programming, mainly from the instruction and hardware perspective.


page 1

page 2

page 3

page 4


Differentiate Everything with a Reversible Domain-Specific Language

Traditional machine instruction level reverse mode automatic differentia...

Reversible Debugging in Logic Programming

Reversible debugging is becoming increasingly popular for locating the s...

Reversible Computation in Term Rewriting

Essentially, in a reversible programming language, for each forward comp...

Introducing Yet Another REversible Language

Yarel is a core reversible programming language that implements a class ...

Branching execution symmetry in Jeopardy by available implicit arguments analysis

When the inverse of an algorithm is well-defined – that is, when its out...

Analyzing Trade-offs in Reversible Linear and Binary Search Algorithms

Reversible algorithms are algorithms in which each step represents a par...

Emerging Applications of Reversible Data Hiding

Reversible data hiding (RDH) is one special type of information hiding, ...

Code Repositories


A differential eDSL that can run faster than light and go back to the past.

view repo