Instructor: Aaron Lanterman
Old webpages: Fall 2007, Fall 2008 (more complete set of posted videos than the 2009 website), Fall 2009 (didn't get around to posting all the videos, but still some good stuff)
Course description: 3-D graphics pipelines. Real-time simulation concerns. GPU architectures. Graphics APIs. Shaders. Multicore programming on symmetric and asymmetric architectires. SIMD and DMA programming.
Prereqs: Any one of the following is sufficient: ECE3035-Mechanisms for Computation or ECE3090-Software Fundamentals for Engineering Systems or CS2110-Computer Organization and Programming or CS2261-Media Device Architecture. Students must be comfortable with C programming. To be widely accessible to ECE students, no background in computer graphics will be required. A lot of the course will use C#, but we will not assume that you've seen C# before, and hence will do an introductory lecture on C#. (If you've seen Java, C++, or any other "curly-brace" language, you've pretty much seen them all.)
Course objective: This class provides the multicore and GPU programming skills needed to meet timely demands of the multimedia, visualization, and gaming industries. The course also bridges the gap between our current generic computer architecture courses and the video game design courses offered by CoC and LCC. The class covers state-of-the-art GPU and multicore architectures from application and hardware design perspectives. The course considers programming models using examples from the algorithmic needs of modern 3-D games (e.g. geometry processing, shading algorithms, physical modeling, collision detection, and artificial intelligence).
Note that as of present, the course does not cover CUDA or OpenCL; I want to say that up front since this has disappointed students in the past. My reasoning is that such technologies are not available on the Xbox 360 and the Playstation 3, which dominate AAA game sales figures, and even on the PC, the market has not gotten to the point where game developers can generally assume that there is enough of a critical mass of PCs equipped with such technologies to make it worth putting significant effort into developing for them. (Also, there are several other classes at Tech that cover things like CUDA, OpenCL, etc., particularly in a scientific computing context where they are quite useful; for this class to stand out, I want to specifically focus on the GPU's "native context" of video games.)
Grading: Students will be expected to undertake several assignments to gain real programming experience on the Cell processor, the Xbox 360, and NVIDIA or ATI graphics cards. NVIDIA and ATI have made donations of several boards to support our class projects. The IBM Center of Competence at Georgia Tech also has generously provided access to their Cell blade system. There may also be a few short essay-type (around 1/2 page) questions and "pencil and paper" exercises. The final letter grade will be based on performance on these projects and exercises. Various assignments may have different weights in the final grade calculation; these weights will be noted on each assignment. Most of the assignments will be individual assignments; however, to practically accommodate the large class size this semester, a few of them may provide the option to work in groups of two (such assignments may still be completed individually if you prefer to work alone). This is a class on programming, so even on team assignments, you should feel confident that you could complete an assignment on your own if you needed to. The "ground rules" for each assignment, which may vary from assignment to assignment, will be given in each assignment description. Please ask if any aspects of the given "ground rules" seem unclear.
There will be no traditional paper-and-pencil exams, either midterms or finals. This is a class about programming; my philosophy is that any time you would spend taking or studying for such exams is better spent in front of a computer actually programming!