As rising performance demands confront plateauing resource budgets, approximate computing (AC) has become not merely attractive, but imperative. We have performed a comprehensive survey of techniques for AC in CPU, GPU and FPGA and various processor components (e.g. cache, main memory, secondary storage), along with approximate storage in SRAM, DRAM/eDRAM, and non-volatile memories, e.g. Flash, STT-RAM, etc. We review design of approximate circuits such as adder, multiplier and general logic circuits. We also review strategies for finding approximable program portions and monitoring output quality, and programming frameworks for AC. Finally, we have highlighted the challenges that are worthy of further investigation.
This survey reviews 85 papers and has been accepted in ACM Computing Surveys 2016 (impact factor 3.37) and has also been highlighted on the InsideHPC (http://insidehpc.com/2016/01/approximatecomputing/) website. The survey comprehensively summarizes the AC techniques across the system stack. As the quest for performance confronts resource constraints, major breakthroughs in computing efficiency are expected to come from unconventional approaches. We hope that this paper will provide insights for AC researchers and inspire more efforts in this area to make AC the mainstream computing approach in future systems.
AC is based on the intuitive observation that while performing exact computation or maintaining peak-level service demands a high amount of resources, allowing selective approximation or occasional violation of the specification can provide disproportionate gains in efficiency. AC leverages the presence of error-tolerant code regions and perceptual limitations of users to trade-off implementation, storage and result accuracy for performance and energy gains. In brief, AC exploits the gap between the level of accuracy required by the applications/users and that provided by the computing system, for achieving diverse optimizations. Thus, AC has the potential to benefit a wide range of applications/frameworks, e.g. data analytics, scientific computing, multimedia and signal processing, machine learning, MapReduce, etc.