Many thanks to NVIDIA and ATI
for donating graphics cards for our Klaus 1446
laboratory
News
- 12/1, 1:47 AM: Videos for Sessions 21 and 22.
- Suggested links added to HW #5 writeup.
Mechanics
When and where: Fall 2010, MWF 1:35-2:55, Van Leer C456
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!
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) - Aaron
Lanterman’s notes from GDC 2009 -
ExtremeTech 3D Pipeline Tutorial – absolutely superb!!! This goes very
well with Prof. Lee’s 3D Pipeline lectures. - Related classes
(both at GaTech and other schools) - Students Explore Video Game Programming and Architecture
in New Course – article on the class from Volume 4, Issue 4 of the
ECE Highlights newsletter -
Video interview
with Aaron Lanterman about the class,
conducted by gamezombie.tv at the 2007 Game Developers Conference - Original
course proposal webpage – explains some of
our original motivations for
putting the class together (although some of what’s described will be
out of date) - Research by people in the game industry:
- Valve
Publications (including papers on shading in
Half-Life 2 and Team Fortress 2) - Insomniac
R&D – notice how deep they are into
Cell SPU assembly programming!
- Valve
-
GPU Gems: Programming Techniques, Tips, and Tricks for Real-Time Graphics
(complete book online) -
GPU Gems 2: Programming Techniques for High-Performance Graphics and
General-Purpose Computation (complete book online) - The Cg Tutorial (complete book online)
Assignments
- HW #1: “Roll Your Own” 3-D Rendering
(due date extended to Wednesday, Sept. 29 at 23:59:59 via T-square) - HW #2: Adding a Dimension
(due date extended to Friday, Oct. 22 at 23:59:59 via T-square) - HW #3: Now You Are Thinking with Shaders
(due Thursday, Nov. 4 at 23:59:59 via T-square) - HW #4: Shaded First Person Shooter
(due Tuesday, Nov. 23 at 23:59:59 via T-square) - HW #5: Aperture Science Xbox Multicorification
Center
(due Friday, Dec. 17 at 05:00:00 via T-square)
<!– - HW #8: The Cell (“8A checkpoint” due
Saturday, Dec. 5 at 23:59:59 via T-square;
“8B boss battle” due Friday, Dec. 11 at 2:20 PM via T-square)
–>
Schedule
See previous years’ websites if you want to get a sense
of what sorts of things we’ll be getting into later in the semester.
Everything is subject change
as we work to inject additional awesomeness into the class.
- 8/18: Session 1 – Introduction
(PDF slides,
PDF slides 4-up,
video)- These videos were not shown in lecture, so be sure to check them
out:
Halo 3
Documentary HD,
Ratchet and Clank (PS3) Insomniac Net-Gen Game Design Interview HD,
Ian Bogost
on The Colbert Report
- These videos were not shown in lecture, so be sure to check them
- 8/20: Session 2 – History of gaming hardware
(PDF slides,
PDF slides 4-up,
video)- Videos: Intellivision TV Commercials –
Plimpton Sports,
Major League Baseball,
Star Strike;
Colecovision 1980s
Commercial;
Atari E.T. Commercial;
SEGA Commercial –
Sega vs. Nintendo (“Blast Processing”),
Genesis
Does What Nintendon’t; Insomniac’s
“Disruptor”:
gameplay,
cutscene;
Konami’s “Metal
Gear Solid”;
Rare’s
“Goldeneye 007”;
Namco’s
“Soul Calibur”
- Videos: Intellivision TV Commercials –
- 8/31: Session 3 – 3D Coordinates & Transformations
(PDF slides,
PDF slides 4-up,
video) - Optional material – Arbitrary Rotations
(PDF slides,
PDF slides 4-up) - 9/2: Session 4 – 3D to 2D Projection
(PDF slides,
PDF slides 4-up,
video) - 9/7: Session 5 – Lighting & Rasterization
(PDF slides,
PDF slides 4-up,
video) - 9/9: Session 6 – Texturing & Blending
(PDF slides,
PDF slides 4-up,
video) - 9/14: Session 7 – Introduction to XNA, Game Loops, and C# Gotchas
(PDF slides,
PDF slides 4-up,
video) - 9/16: Session 8 – GPUs – Under the Hood
(PDF slides,
PDF slides 4-up,
video) - 9/21: Session 9 – Walkthrough of an XNA 2D Game
(PDF slides,
PDF slides 4-up,
video) - 9/23: No class
- 9/28: CM/CS/CompE/EE Curricular Complain-fest
- 9/30: Guest speaker from Electronic Arts
- 10/5: Session 10 – XNA 3-D API Basics
(PDF slides,
PDF slides 4-up,
video) - 10/7: Session 11 – Rendering 3-D Content
(PDF slides,
PDF slides 4-up,
video) - 10/12: Session 12 – Programmable Shaders, Part 1
(PDF slides,
PDF slides 4-up,
video) - 10/14: Session 13 – Programmable Shaders, Part 2
(video part 2A,
part 2B) - 10/21: Session 14 – Programmable Shaders, Part 3
(video) - 10/26: Session 15 – Environment & Bump Mapping
(PDF slides,
PDF slides 4-up,
video part A,
part B) - Optional material – Animation on the GPU
(PDF slides,
PDF slides 4-up) - 10/28: Session 16 – Postprocessing
(PDF slides,
PDF slides 4-up,
video) - 11/2: Session 17 – Projective Textures & Shadow Maps
(PDF slides,
PDF slides 4-up,
video part A,
part B)- C. Everitt,
Projective Texture Mapping - C. Everitt, A. Rege, C. Cebenoyan,
Hardware
Shadow Mapping
- C. Everitt,
- Optional material – “Classic” GPGPU
(PDF slides,
PDF slides 4-up) - 11/4: Session 18 – Architectural Comparison: Xbox 360 vs. Playstation 3
(PDF slides,
PDF slides 4-up,
video)- Xbox
360 System Architecture,
IEEE Micro, Vol. 26, No. 2,
March-April 2006, pp. 25-37.
- Xbox
- Optional material – PlayStation 2 Architecture
(PDF slides,
PDF slides 4-up) - 11/9: Session 19 – Introduction to Multithreading, Part 1
(PDF slides,
PDF slides 4-up,
video)- Bruce Dawson,
Lockless
Programming Considerations for Xbox 360 and Microsoft Windows - Bruce Dawson,
Lockless Programming in Games - Threading in C#
by Joseph Albahari (hat tip to former MPG student Travis Gockel for
pointing out the link) - Added 12/7
Mike Gold, Introduction
to Multithreading in C# - Added 11/17 Bruce Dawson, Multi-Core
Memory Coherence – The Hidden Perils of Sharing Data
(very advanced, focused
on “pro” Xbox 360 C++ development)
- Bruce Dawson,
- 11/11: Session 20 – Introduction to Multithreading, Part 2
(video) - Optional material – Pulse/Wait and Semaphores
(PDF slides,
PDF slides 4-up) - 11/16: Session 21 – Multicore Strategies for Games
(PDF slides,
PDF slides 4-up,
video)- Bruce Dawson,
Coding
for Multiple Cores on Xbox 360 and Microsoft Windows (the
code examples are C++, not C#, but many of the ideas still apply; just
remember that XNA/C# programming hides you from some of the more
difficult aspects of “raw” Xbox 360 C++ programming) - Bruce Dawson and Chuck Walbourn, PowerPoint presentation,
Coding for Multiple Cores
(same parenthetical comment for the last bullet point applies) - Added 11/17 Ian Lewis,
Multicore
Programming, Two Years Later (advanced, focused
on “pro” Xbox 360 C++ development) - Blog entries by The Pensive Gamer:
XNA Game Loop
and Threading,
XNA Threading – The Problems,
XNA Threading – Locks - Catalin Zima,
Multi-threading for your XNA Game (zip file of materials) - Added 11/18 Running on Empty,
XNA
Framework GameEngine Development (Part 8,
Multi-Threading GameComponents) – focuses on background loading
- Bruce Dawson,
- Added 11/18 Some generally useful XNA/Xbox 360 links:
- Added 11/18 Managed
Code Performance on Xbox 360 for XNA: Part 1 – Intro and CPU - Added 11/18 Managed Code Performance on Xbox 360 for XNA: Part 2 – GC and Tools
- Added 11/18 Shawn Hargreaves, Understanding XNA Framework Performance
- Added 11/18 Managed
- 11/18: Session 22 – Introduction to Cell Programming
(Aaron’s PDF slides,
Aaron’s PDF slides 4-up,
Cell BE – An Introduction (ppt),
Cell BE Basic Programming Concepts (ppt),
video)- 9/1: Session 5 – 3D Rendering Pipeline (II), Part 2
(video) - 9/3: Session 6 – 3D Rendering Pipeline (III), Part 1
(PDF slides, revised 9/12,
PDF slides 4-up,
revised 9/12) - 9/8: Session 7 – 3D Rendering Pipeline (III), Part 2
- 9/10: Session 8 – 3D Rendering Pipeline (III), Part 3
(video) - 9/15: Session 9 – Introduction to XNA, Game Loops, and C# Gotchas
(PDF slides,
PDF slides 4-up) - 9/17: Session 10 – Guest speaker: Jose Caban, Electronic Arts, Tiburon
- 9/24: Session 11 – A Walkthrough of an XNA 2D Game
(PDF slides,
PDF slides 4-up,
video) - 10/1: Session 12 – More XNA Basics, Part 1
(PDF slides,
PDF slides 4-up,
video to be posted) - 10/8: Session 13 – More XNA Basics, Part 2; XNA and Programmable
Shaders, Part 1
(PDF slides,
PDF slides 4-up,
video to be posted) - 10/13: Session 14 – GPUs – Under the Hood
(PDF slides,
PDF slides 4-up,
video to be posted) - 10/15: Session 15 – XNA and Programmable Shaders, Part 2
(video to be posted) - 10/20: Session 16 – Environment and Bump Mapping
(PDF slides,
PDF slides 4-up,
video) - 10/22: Session 17 – Projective Textures and Shadow Maps
(PDF slides,
PDF slides 4-up,
video to be posted)- C. Everitt,
Projective Texture Mapping - C. Everitt, A. Rege, C. Cebenoyan,
Hardware
Shadow Mapping
- C. Everitt,
- 10/27: Session 18 – Postprocessing
(PDF slides,
PDF slides 4-up,
video to be posted) - Optional material – “Classic” GPGPU
(PDF slides,
PDF slides 4-up) - 10/29: Session 19 – Architectural Comparison: Xbox 360 vs. Playstation 3
(PDF slides,
PDF slides 4-up,
video to be posted)- Xbox
360 System Architecture,
IEEE Micro, Vol. 26, No. 2,
March-April 2006, pp. 25-37.
- Xbox
- 11/3: Session 20 – Introduction to Multithreading, Part 1
(PDF slides,
PDF slides 4-up,
video to be posted)- Bruce Dawson,
Lockless
Programming Considerations for Xbox 360 and Microsoft Windows - Bruce Dawson,
Lockless Programming in Games - Threading in C#
by Joseph Albahari (hat tip to Travis Gockel for
pointing out the link)
- Bruce Dawson,
- 11/5: Session 21 – Introduction to Multithreading, Part 2
- Optional material – Pulse/Wait and Semaphores
(PDF slides,
PDF slides 4-up) - 11/10: Session 22 – Multicore Strategies for Games
(PDF slides,
PDF slides 4-up,
video to be posted)- Bruce Dawson,
Coding
for Multiple Cores on Xbox 360 and Microsoft Windows (the
code examples are C++, not C#, but many of the ideas still apply) - Bruce Dawson and Chuck Walbourn, PowerPoint presentation,
Coding for Multiple Cores - Blog entries by The Pensive Gamer:
XNA Game Loop
and Threading,
XNA Threading – The Problems,
XNA Threading – Locks - Catalin Zima,
Multi-threading for your XNA Game (new zip file link added 11/21/09)
- Bruce Dawson,
- 11/17: Session 23 – Introduction to Cell Programming
(Aaron’s PDF slides,
Aaron’s PDF slides 4-up,
Cell BE – An Introduction (ppt),
Cell BE Basic Programming Concepts (ppt),
video to be posted)- Cell BE
Programming Tutorial
<!– -
Introduction
to the Cell multiprocessor,
IBM Journal of Research and Development, Vo. 49,
2005, pp. 589-604.
–>
<!– -
Synergistic
Processing in
Cell’s Multicore Architecture, IEEE Micro, Vol. 26, No. 2, March-April
2006, pp.10-24. - The
Cell project at IBM Research -
Programming
high-performance applications on the Cell BE
processor, Part 1: An introduction to Linux on the PLAYSTATION 3 - The
Insomniacs: Can a team of scrappy game programmers
save Sony’s monster chip?, IEEE Spectrum, Dec. 2006, pp. 24-29. - The Potential of the Cell Processor for Scientific
Computing
M
- Cell BE
- 11/19: Session 24 – Cell Programming: SIMD
(Developing Code for Cell – SIMD (ppt),
Hands-on SIMD (ppt),
video to be posted) - 11/24: Session 25 – Cell Programming: DMA
(Developing Code for Cell – DMA & Mailboxes (ppt),
Hands-on DMA 1 (ppt),
Hands-on – DMA
Transfer Using get and put Buffer (pdf),
Hands-on – DMA Transfer
Using Control Block (pdf),
Developing Code for Cell – DMA,- Cell
BE Programming Handbook (see Chapter 19)
–><!–
- Cell
- 12/3: Session 44 – Larrabee
PDF slides- Larabee: A Many-Core x86 Architecture for Visual Computing,
ACM Transactions on Graphics, August 28
- Larabee: A Many-Core x86 Architecture for Visual Computing,
- 12/5: Session 45 – Wrap-up
<!–
–>
- 9/1: Session 5 – 3D Rendering Pipeline (II), Part 2