Precimonious: Tuning Assistant for Floating-Point Precision

Given the variety of numerical errors that can occur, floating-
point programs are difficult to write, test and debug. One
common practice employed by developers without an ad-
vanced background in numerical analysis is using the high-
est available precision. While more robust, this can de-
grade program performance signi ficantly. In this paper we
present Precimonious, a dynamic program analysis tool
to assist developers in tuning the precision of floating-point
programs. Precimonious performs a search on the types
of the floating-point program variables trying to lower their
precision subject to accuracy constraints and performance
goals. Our tool recommends a type instantiation that uses
lower precision while producing an accurate enough answer
without causing exceptions. We evaluate Precimonious
on several widely used functions from the GNU Scienti c
Library, two NAS Parallel Benchmarks, and three other
numerical programs. For most of the programs analyzed,
Precimonious reduces precision, which results in perfor-
mance improvements as high as 41%