Visual Computing Systems
CMU 15-869 | Fall 2013
CMU 15-869, Fall 2013
Mon/Wed 12:00 - 1:20pm (GHC 4303)
Instructor: Kayvon Fatahalian
How to Prepare for the Course

Hello there. I'm glad you are interested in 15-869. This course focuses on the design of computing systems that efficiently meet the aggressive performance demands of visual computing applications. Specifically we'll be concerned with 3D graphics, image processing, and emerging computer vision tasks. Since designing highly efficient systems requires in-depth knowledge of the workloads to execute, we will cover key algorithms used in each of these domains. That is, you will certainly learn some advanced graphics. Conversely, to execute with high performance, algorithms must be mapped efficiently to hardware resources, and to do so, we will talk extensively about the characteristics of modern parallel architecture, and how that impacts the choice of algorithms used. That is, we will also be discussing parallel computer architecture is this class. A key theme of this course is that, to achieve the most efficient solutions, modern systems architects should simultaneously consider opportunities for innovation in the design of algorithms, the programming frameworks used to express them, and the capabilities of the underlying hardware architecture. Regardless of whether you are an application developer, systems software programmer, or hardware architect, I want to you leave this course with a better understanding of how to think end-to-end.

It is likely that you may have a strong background in parallel architecture or in computer graphics, but not in both. Do not panic. Instead, get yourself ready. The course does not begin until Sept 9th.

This year's installment of 15-869 is an evolution of the Fall 2011 seminar version of 15-869, which you can find here. If you're not sure about taking 15-869, I recommend skimming the lecture slides or readings to get a sense of the material.

1. Checking Your Parallel Programming and Computer Architecture Background...

If you have not taken a parallel computing or architecture class at least at the level of 15-418: Parallel Computer Architecture and Programming, you may want to consider taking 15-418 before taking this course. If you have not taken 15-418 but want to bravely forge ahead...

If you are not a graduate student in computer architecture or have not not received special permission from me, I want you to complete and hand in 15-418 assignment 1 by Thursday Sept 5th (the Thursday before the start of the course). The point of this exercise is to see how well you can write basic parallel code and analyze performance of a parallel program on a real machine.

I also strongly advise that you complete 15-418 Assignment 2 prior to the start of the class. This will give you some experience with GPU programming and the opportunity to write some basic renderer code in CUDA.

You may wish to watch all the 15-418 Spring 2013 lectures up through and including Feb 12th lecture on Workload-Driven Performance Evaluation. All the videos are online. The April 11th lecture on Heterogeneous Parallelism and Hardware Specialization is also particularly relevant to 15-869.

2. Checking Your Background in Graphics...

If you've taken 15-462 or an equivalent undergraduate graphics course, you have sufficient graphics background for 15-869. Courses like 15-463: Computational Photography will also be helpful when we get to the image processing sections of the course.

If you've never taken graphics before, but have a very strong background in parallel systems or computer architecture, you'll be able to stay with us in the course, but you should do some reading about programming using OpenGL.

One way to get started is to look at the readings associated with the first couple of lectures of the Fall 2011 seminar: Graphics and Imaging Architectures. You'll also do well to dip your toe into some basic OpenGL programming.

As I recommended above to students that haven't taken 15-418, I also recommend to try your hand it 15-418 Assignment 2 prior to the start of the class. This will give you some experience with GPU programming and the opportunity to write some basic renderer code in CUDA.

3. But What About Final Projects?

The biggest part of your grade in 15-869 will be determined by your final project. The project span the final seven weeks of class (students are encouraged to start earlier if they wish). You have significant flexibility in your choice of project but expectations for quality will be high. Architecture students may wish to partner up with graphics students to amplify each others skills to produce great projects. A quick list of potential project topics is given below, but any good idea consistent with the themes of the course will be acceptable.

  • Implement advanced graphics algorithms (rendering, simulation) on a GPU or multi-core CPU and analyze their performance in detail.
  • Propose an improvement to the graphics pipeline algorithms or pipeline scheduling algorithms discussed in class and evaluate the performance of your solution via simulation or on a real machine.
  • Propose a change to the OpenGL interface and evaluate the benefits to implementations.
  • Implement a graphics pipeline component in Verilog.
  • Implement a micro-benchmark suite for image-processing applications and evaluate their execution on an architectural simulator.
  • Modify the Halide compiler to add a new language feature.
  • Propose a new programming framework for image processing at scale, and implement it on a cluster.
  • Attempt to generalize key hardware components of a GPU to broaden their usage scope (e.g., texture compression)
  • Investigate thread or memory request scheduling policies on a GPU
  • Consider adding programmability to the image processors present in most SoCs. How does your change impact performance and efficiency?
  • Build an image search engine that scales across many machines.

4. But I'm Still Unsure if I'm Prepared

Just come talk to your friendly instructor before the start of the course.