AbstractApproximate computing has been an emerging programming and system design paradigm that has been proposed as a way to overcome the
power-wall problem that hinders the scaling of the next generation of both high-end and mobile computing systems. Towards this
end, a lot of researchers have been studying the effects of approximation to applications and those hardware modifications that
allow increased power benefits for reduced reliability. In this work, we focus on runtime system modifications and task-based
programming models that enable software-controlled, user-driven approximate computing.
We employ a systematic methodology that allows us to evaluate the potential energy and performance benefits of approximate
computing using as building blocks unreliable hardware components. We present a set of extensions to OpenMP 4.0 that enable the
programmer to define computations suitable for approximation. We introduce task-significance, a novel concept that describes the
contribution of a task to the quality of the result. We use significance as a channel of communication from domain specific
knowledge about applications towards the runtime-system, where we can optimise approximate execution depending on user
Finally, we show extensions to the Linux kernel that enable it to operate seamlessly on top of unreliable memory and provide a
user-space interface for memory allocation from the unreliable portion of the physical memory. Having this framework in place
allowed us to identify what we call the refresh-by-access property of applications that use dynamic random-access memory (DRAM).
We use this property to implement techniques for task-based applications that minimise the probability of errors when using
unreliable memory enabling increased quality and power efficiency when using unreliable DRAM.
|Date of Award||11 Dec 2017|
|Sponsors||European Commission & Northern Ireland Department for the Economy|
|Supervisor||Hans Vandierendonck (Supervisor) & Dimitrios Nikolopoulos (Supervisor)|
- approximate computing
- significance-based computing
- parallel computing
- task-based programming