Overview

Developing reliable numerical software has traditionally been a tedious process which requires significant expertise. Recently, our team at the University of Washington has been investigating how tools may lower the barrier to entry for non-experts. This talk discusses two such tools, Herbgrind and Herbie, that help non-expert developers debug and improve their programs. Herbgrind uses a dynamic program analysis that finds root causes for numerical problems in program binaries. Herbgrind instruments program binaries to additionally compute over shadow values that track floating-point operations in higher precision, then uses a taint analysis to find possible causes for erroneous outputs. To recover the context of root cause instructions, it uses anti-unification to build up an abstract representation of instruction inputs. Herbie uses heuristic search to find more-accurate ways of evaluating floating-point formulas. Herbie uses a variety of rewriting strategies to modify the input formula, focusing changes on the part of the formula responsible for the most error. Then, multiple modified formulas can be combined based into one by finding regions of the input space where they are more accurate.