Visual Computing Systems
CMU 15-869 | Fall 2014
CMU 15-869, Fall 2014
Mon/Wed 1:30-2:50pm (GHC 4102)
Instructor: Kayvon Fatahalian
Course Description

Visual computing tasks such as graphics, image processing, and image understanding are important responsibilities of modern computer systems ranging from sensor-rich smart phones to large datacenters. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel systems for visual computing applications.

15-869 is divided into three phases, each focusing on a unique domain of visual computing. It begins with an in-depth study of the real-time 3D graphics pipeline and its modern GPU implementations (GPU processing and communication resources, graphics pipeline algorithms and their scheduling on heterogeneous, parallel hardware that balances conflicting needs of efficiency and programmability). It then transitions into a study of the image processing pipeline in computational cameras (key algorithms, workload scheduling decisions, hardware acceleration, and the potential of new programming frameworks). The third phase of the course will be seminar-style, and will involve exploration of the challenges of designing systems for scaling image understanding applications to Internet scales (analyzing and searching the world's photos and videos).

This course is intended for graduate-level and advanced undergraduate students interested in architecting efficient future graphics and image processing platforms or developing scalable algorithms on these platforms. Systems and architecture students interested in gaining experience with the algorithms, applications, and programming abstractions that will drive the design of heterogeneous, parallel systems are welcome and encouraged.


Kayvon Fatahalian
[kayvonf @ cs]
EDSH 225
Office hours: drop by anytime, or by appointment

Yong He (TA)
[yongh @ cs]
GHC 7117
Office hours: 3-4pm on Wed (after class), or by appointment


Please start by reading "How to Prepare for 15-869".

This is a graduate-level course with no official prerequisites (advanced undergraduates are welcome, but you are responsible for determining whether you can keep up with the course). Students will read academic papers each week, perform a number of short assignments, and conduct a substantial seven-week final project. I recommend having at least 15-418/618 (or a computer architecture course such as 18-447, preferably 18-740 or 18-742) and some graphics experience at the level of 15-462. The more implementation experience you have the better. Graduate-level architecture and systems students without substantial graphics experience are welcome, but must be willing to familiarize themselves with key graphics/visual computing concepts during the course.

Discussion Boards

We will be using Piazza for annoucements. The 15-869 Fall 2014 Piazza page is located here.

Assignments and Projects
  • Paper Readings: 30% (you will read and summarize approximately one paper per class)
  • Programming Assignments: 25%
  • Final Project: 45%
Collaboration Policy

Students are absolutely encouraged to talk to each other or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each programming project team must write their own code and produce their own writeup. Consulting another student's or team's solution is prohibited and submitted solutions may not be copied from any source. These and any other form of collaboration on assignments constitute cheating. If you have any question about whether some activity would constitute cheating, just be cautious and ask the instructors before proceeding!

You may not supply assignment code or assignment writeups you complete during 15-869 to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who've taken the course previously). Make sure to make repositories private if you use public source control hosts like github.