Multicore and GPU Programming for Video Games

Multicore and GPU Programming for Video Games

Fall 2011

Many thanks to NVIDIA and ATI
for donating graphics cards for our Klaus 1446


  • Aaron ate too much food during Thanksgiving.


When and where: Fall 2011, TuTh 1:35-2:55, Van Leer C240

Aaron Lanterman

Old webpages:
Fall 2007,
Fall 2008,
Fall 2009
(didn’t get around to posting all the videos, but still some good stuff),
Fall 2010

Course description: 3-D graphics pipelines. Real-time simulation
concerns. GPU architectures. Graphics APIs. Shader programming.
Multicore programming.

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.)

Students will be expected to
undertake several assignments to gain real programming experience on
NVIDIA or ATI graphics cards, and the Xbox 360.
and ATI have made donations of several boards to support our class projects.
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
these weights will be noted on each assignment. Most of the
assignments will be individual assignments; however,
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!

Further information

  • To be posted shortly: Software
    used in this class
    – links
    to programs (SDKs, etc.)
    you want to get if you want to work on your own machine (which
    is strongly encouraged)