  Standard library implementations of functions like sin and exp optimize for
accuracy, not speed, because they are intended for general-purpose use. But
applications tolerate inaccuracy from cancellation, rounding error, and
singularities-sometimes even very high error-and many application could
tolerate error in function implementations as well. This raises an intriguing
possibility: speeding up numerical code by tuning standard function
implementations. This paper thus introduces OpTuner, an automatic method for
selecting the best implementation of mathematical functions at each use site.
OpTuner assembles dozens of implementations for the standard mathematical
functions from across the speed-accuracy spectrum. OpTuner then uses error
Taylor series and integer linear programming to compute optimal assignments of
function implementation to use site and presents the user with a speed-accuracy
Pareto curve they can use to speed up their code. In a case study on the
POV-Ray ray tracer, OpTuner speeds up a critical computation, leading to a
whole program speedup of 9% with no change in the program output (whereas human
efforts result in slower code and lower-quality output). On a broader study of
37 standard benchmarks, OpTuner matches 216 implementations to 89 use sites and
demonstrates speed-ups of 107% for negligible decreases in accuracy and of up
to 438% for error-tolerant applications.
