error-efficient computing (How to exploit failure for speed and battery life)
Prerequisites: The course is best suited for advanced undergraduates or early graduate students with an affinity for either computer science or electrical engineering. Participants should be familiar with tools such as Git and Make. Basic programming knowledge (e.g., C, C++, Java, Python). Knowledge of of basic computer architecture useful, but not required. A laptop running a Unix-based operating system (e.g., Linux, MacOS) will be needed for projects.
Load: 10 A.M. - 12 P.M. on Jan. 9 - 13, 17 - 20 (Nine 2-hour sessions over two weeks)
Time Outside Class: Approx. 6 hours total for group work, primarily for final project.
Special Instructions: Bring Laptop to Class
This course will explore ways to exploit properties of nature and human perception to reduce the energy usage of computing systems by making controlled errors. At the end of this course, you will be able to:
* Describe examples of computing systems and applications that exploit tolerance of errors in their inputs, in their algorithm operations, and in their outputs.
* Use hardware based on the low-power ARM Cortex-M0 and OLED displays, as well as open-source software tools, to illustrate examples of
* Propose extensions of the hardware and software tools introduced in the course for new system designs or applications.
* Differentiate between precision, accuracy, and reliability, to describe the role they play in numerical computations, and to apply these concepts to analysis and design of new computing systems.
Session 1: Introduction, concepts, software, and hardware tools
After this session, you will be able to: describe the motivation for studying error-efficiency in computing systems; describe examples of computing systems and applications that exploit tolerance of errors in their inputs, algorithm operations, and outputs; to install and use the hardware and software tools of the course.
Session 2: Fault-tolerance, numerical analysis, error-efficiency
After this session, you will be able to: enumerate the key motivations and techniques for traditional fault tolerance and dependability in computing systems; clearly differentiate fault-tolerant systems from those that are not; distinguish between the concepts of fault-tolerance and error-efficiency; enumerate the roles of numerical analysis in computing.
Session 3: Exploiting nature for efficiency in sensors / displays
After this session, you will be able to: describe the nature of data acquisition subsystems and how they relate to the physical phenomena they measure; apply insights from this relation to the analysis and design of sensors; describethe primary classes of outputs of computing systems, and how they relate to the entities which consume their outputs; apply insights from this relation to the analysis and design of output/display systems.
Session 4: Team project proposals / Tolerance of errors in input data
In this session, you will receive feedback from the instructor and from your peers about your proposed short project. After this session, you will be able to: describe why tolerance of errors in input data sometimes exists in algorithms; provide examples of systems that can tolerance errors in input data, and the potential ways to exploit this tolerance of errors to improve time-efficiency (performance) or energy-efficiency; apply these concepts to the analysis of existing systems, and to the design of new systems.
Session 5: Tolerance of errors in algorithm operations
After this session, you will be able to: identify the key properties of algorithms that make them tolerant to errors in their operations; apply these insights to the analysis of both software and hardware implementations of algorithms that can tolerate errors.
Session 6: Tolerance of errors in outputs and perception
After this session, you will be able to: enumerate the main classes of systems in which errors in the outputs of computation are tolerable; apply insights about these systems to analyze and design methods to exploit their properties for improvements in performance or energy-efficiency.
Session 7: Precision, accuracy, reliability, and numerics
After this session, you will be able to: differentiate between precision, accuracy, and reliability; describe the role precision, accuracy, and reliability play in computations; enumerate the key concepts pertaining to precision, accuracy, and reliability in computations; apply these concepts to the analysis and design of computing systems where precision, accuracy, and reliability are a concern.
Session 8: Efficiency limits and bounds
After this session, you will be able to: describe why there are fundamental limits on time-efficiency, energy-efficiency, and error-efficiency in computing systems; describe known bounds on efficiency; analyze and formulate new efficiency bounds.
Session 9: Team project presentations and demos
In this session, you will receive feedback from the instructor and from your peers about your completed short project.