Computing resources are fundamentally limited and sometimes an exact solution
may not even exist. Thus, when implementing real-world systems, approximations
are inevitable, as are the errors introduced by them. The magnitude of errors is
problem-dependent but higher accuracy generally comes at a cost in terms of
memory, energy or runtime, effectively creating an accuracy-efficiency tradeoff.
To take advantage of this tradeoff, we need to ensure that the computed results
are sufficiently accurate, otherwise we risk disastrously incorrect results or
system failures. Unfortunately, the current way of programming with
approximations is mostly manual, and consequently costly, error prone and often
produces suboptimal results.
In this talk I will present our vision and efforts so far towards an approximating
compiler for numerical computations. Such a compiler would take as input exact
high-level code with an accuracy specification and automatically synthesize
an approximated implementation which is as efficient as possible, but verifiably
computes accurate enough results.