Getting to the Point: Index Sets and Parallelism-Preserving Autodiff for Pointful Array Programming

Adam Paszke
Alexey Radul
David Duvenaud
Dimitrios Vytiniotis
Dougal Maclaurin
Jonathan Ragan-Kelley
Matthew Johnson
Proceedings of the ACM on Programming Languages (PACMPL), 5 (2021), 88:1-88:29

Abstract

We present a novel programming language design that attempts to combine the clarity and safety of high-level functional languages with the efficiency and parallelism of low-level numerical languages.
We treat arrays as eagerly-memoized functions on typed index sets, allowing abstract function manipulations, such as currying, to work on arrays.
In contrast to composing primitive bulk-array operations, we argue for an explicit nested indexing style that mirrors application of functions to arguments.
We also introduce a fine-grained typed effects system which affords concise and automatically-parallelized in-place updates. Specifically, an associative accumulation effect allows reverse-mode automatic differentiation of in-place updates in a way that preserves parallelism.
Empirically, we benchmark against the Futhark array programming language, and demonstrate that aggressive inlining and type-driven compilation allows array programs to be written in an expressive, "pointful" style with little performance penalty.