Verifying Properties of Index Arrays in a Purely-Functional Data-Parallel Language
Nikolaj Hey Hinnerskov, Robert Schenck, Cosmin E. Oancea

TL;DR
This paper introduces a framework for automatically verifying properties of pure data-parallel programs with non-linear indexing by representing arrays as index functions and using algebraic reasoning, demonstrated in Futhark.
Contribution
It presents a novel approach to verify properties of data-parallel programs with non-linear indexing through index functions and algebraic reasoning, enabling practical and automatic verification.
Findings
Average verification time of 1 second on seven applications
Eliminating dynamic verification leads to significant GPU speedups
Framework extends beyond correctness to enable compiler optimizations
Abstract
This paper presents a novel approach to automatically verify properties of pure data-parallel programs with non-linear indexing -- expressed as pre- and post-conditions on functions. Programs consist of nests of second-order array combinators (e.g., map, scan, and scatter) and loops. The key idea is to represent arrays as index functions: programs are index function transformations over which properties are propagated and inferred. Our framework proves properties on index functions by distilling them into algebraic (in)equalities and discharging them to a Fourier-Motzkin-based solver. The framework is practical and accessible: properties are not restricted to a decidable logic, but instead are carefully selected to express practically useful guarantees that can be automatically reasoned about and inferred. These guarantees extend beyond program correctness and can be exploited by the…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsFormal Methods in Verification · Logic, programming, and type systems · Parallel Computing and Optimization Techniques
