CS491/591 Fall 2009: Robust Physical Computation

{Updated:Mon Aug 24, 2009}
Class: Mondays 1pm to 4pm
Room: FEC141
Instructor: David Ackley
Office hours: M 4pm-5pm; W 11am-3pm

Traditional computational growth --- one CPU ever faster, one memory ever vaster -- served well for sixty years, but it is now stalling, burned out by the energy, heat, and increasingly heroic engineering required to preserve the paradigm. Dual (etc) cores are buying time, but cache coherency is doomed. In addition, such all-in-one-basket thinking leads to system fragility (and of course is an epic security nightmare).

Networks, like the internet, scale quite differently -- many individual systems, sometimes mutually untrusting, cooperating to perform useful tasks. With hardware prices still declining, why not explore that path for building more robust and scalable personal systems as well -- sort of a 'personal internet in a box'? That is what we will do in this class.

We will use a small microprocessor-powered board, and build systems of multiple boards, potentially lots of them. Writing in a stylized subset of C or C++ on top of a hardware management library, students will design, implement, debug, and characterize programs running on such systems. One hallmark of quality for us will be that such a program can discover, communicate, coordinate, and cooperate with others (like itself, or perhaps other 'species'), to make progress on available hardware, even when (dis)connections happen on the fly.

There will be some introductory lectures and programming exercises to get us started, but the bulk of the coursework will be an individual project for each student, arranged with the instructor. Class meetings will contain both work time and 'critiques', during which students present their work-in-progress and receive reactions from the class. There will be a final project presentation and other graded elements to be announced; there will be no exams.

Possible projects depend heavily on student interests; naturally, more ambitious projects will be expected of any graduate students in the class. A project might involve a new or improved element of the system infrastructure, such as networking or energy-aware computing, or might be of the form 'A robust physical implementation of X', where X is some concept or computational style familiar from traditional computing.

Prerequisites: CS241, CS251, and a strong interest in programming. EE238 is a plus but not required, as is experience with microprocessors (e.g., Arduino, Basic Stamp, PIC, etc). In most cases, code will be written in C or C++.

Each student will have access to at least two boards to work with outside of class. Larger collections of boards will be assembled for testing and demos during classes. Enrollment is necessarily limited.