CIS 665: GPU Programming and Architecture

Description |  Information |  Lectures |  Homework |  More Slides |  Drivers |  Examples |  Links |  Final Projects

Class Description

This course will examine the architecture and capabilities of modern GPUs (graphics processing unit).
The GPU has grown in power over recent years, to the point where many computations can be performed
faster on the GPU than on a traditional CPU. GPUs have also become programmable, allowing them to
be used for a diverse set of applications far removed from traditional graphics settings.

Topics covered will include architectural aspects of modern GPUs, with a special focus on their
streaming parallel nature, writing programs on the GPU using high level languages like Cg, CUDA, SlabOps,
and using the GPU for graphics and general purpose applications in the area of geometry modelling,
physical simulation, scientific computing and games.

The course will be hands-on; there will be regular programming assignments, and students will also
be expected to work on a project (most likely a larger programming endeavour, though more
theoretical options will be considered). Students will be expected to have a basic understanding of
computer architecture, graphics, and OpenGL.

Class Information

Course Syllabus:   HTML
Course Location and Times: Mondays 6pm - 9pm (Towne 307)

   Gary J. Katz
   Joseph Kider


  1. 01/8/2007: Intro to the course: Why study the GPU     Slides: PPT
    Assignment 0: Fill out the in classs survey

  2. 01/8/2007: The Fixed-Function Pipeline    Slides: PPT
    Assignment 1: Graphics Pipleline (Given out) : Due Jan 22, 2007

  3. 01/22/2007: The Programmable Pipeline / Memory Models    Slides: PPT
    • The Cg book: Chapter 1 (The History of the pipeline)
    • Extremetech articles: What happened in 2004, what to look forward to in 2005, what ATI and NVIDIA see in the future.

  4. 01/22/2007: Cg Programming Tutorial (Joe)    Slides: PPT | PDF
    • Code examples are below
    • Visit the forums for a wealth of information on Cg hacking.
    Assignment 2: CG and FBOs (Given out) : Due Feb 5, 2007

  5. 01/29/2007: Fast Texture Transfers    

  6. 01/29/2007: Rendering Gooey Materials / Reflections from Bumpy Surfaces    

  7. 02/5/2007: Sorting And Searching    Slides: PPT

  8. 02/5/2007: Matrix Operations    Slides: PPT

  9. 02/12/2007: Directx10    
    Final Project: Description and Guidelines (Given out)

  10. 02/12/2007: CUDA and the GeForce 8800    
    Assignment 3: Matrix Operations and CUDA Programming (Given Out): Due Mar 2, 2007

  11. 02/19/2007: Skin Rendering    Slides: PPT

  12. 02/19/2007: Animation and Morphing    Slides: PPT
    • Morphing between two different Objects by Ronny Burkersroda (ShaderX 3)
    • Morph Target Animation by Christian Kleinhuis (ShaderX 4)
    • Real-Time Character Animation on the GPU by Michael Nischt (ShaderX 4)

  13. 02/26/2007: GPGPU I: Basic Learning and Solving Linear Systems    Supplemental Slides: PPT

  14. 02/26/2007: GPGPU II: Physical Simulation the GPU    Slides: PPT1 | PPT2

  15. 03/12/2007: Abstracting GPGPU: SlabOps    Slides: PPT

  16. 03/12/2007: Collision Detection using Graphics Hardware    Slides: PPT

  17. 03/19/2007: Particle Systems on the GPU    

  18. 03/19/2007: Optimizations for Graphics Hardware    Slides:  NVIDA PDF | ATI PDF

  19. 03/26/2007: Modeling & Simulation     - Guest Lecturer: Mike Hakos (Lockhead Martin)

  20. 03/26/2007: Fast Fourier Transforms on the GPU    Slides: PPT

  21. 04/02/2007: Parallel Architectures: Cell Architecture and Programming     - Steven Crowe

  22. 04/02/2007: Parallel Architectures: GPU 8800 Compute Core and CUDA Programming Tricks    

  23. 04/09/2007: Global Illumination on the GPU    

  24. 04/09/2007: Student Project Alpha Reviews    

  25. 04/16/2007: Parallax Mapping on the GPU    

  26. 04/16/2007: CUDA Performance    

  27. 04/16/2007: Future Trends (GPU or Multicore Processor: Who will win?)    
    We had some slides here, but they mostly prompted discussion topics with the class.

Homework and Final Project Information

  • Homework #1 (Graphics Pipeline):   WORD
  • Homework #2 (CG and FBOs):   PDF  |  WORD
  • Homework #3 (GPGPU: GPU = Parallel Machine/ CUDA):   PDF  |  WORD

  • Final Project Information   PDF
  • Final Project Sample Proposal:    WORD
  • Final Projects: Class Wiki of Project Pages

  • Extra Slides

  • SuperComputing 2006 Tutorial on GPGPU:   HTML
  • Supercomputing '06 Workshop: "General-Purpose GPU Computing: Practice And Experience"   HTML
  • Siggraph 2005 GPGPU Course:   HTML
  • Siggraph 2004 GPGPU Course:   HTML
  • IEEE Visualization 2005 Tutorial on GPGPU:   HTML
  • IEEE Visualization 2004 Tutorial on GPGPU:   HTML
  • University of North Carolina: COMP 790-058: Lecture Schedule (Dinesh Manocha and Avneesh Sud):   HTML
  • CIS 665 Lecture 4 Intro CG Programming Slides:   PPT  |  PDF
  • The CG Tutorial Book:   PDF
  • Paul Kanyuk's Lecture Slides:   PPT
  • Simon Green's FBO slides (Nvidia):   PPT
  • Suresh Venkatasubramanian's RenderTexture/Ping Pong slides:   PPT
  • CG Tutorial Slides:   PPT
  • CG Tutorial Website:   HTML
  • Mark Harris' (Mapping computational concepts to the GPU):   PPT
  • David Luebke's General-Purpose GPU Computing:   PPT

  • Drivers

  • Driver Setup Guide:   HTML
  • CG Toolkit:   Windows  |  Linux  |  Mac OSX Panther  |  Mac OS X Tiger
  • Installer for CUDA Toolkit Version 0.8 and CUDA SDK Version 0.8:   Windows XP  |  Linux
  • NVIDIA Linux Display Driver Version 97.51 for CUDA Toolkit Version 0.8: Download
  • NVIDIA Windows Display Driver version 97.73 for CUDA Toolkit Version 0.8: Download
  • Latest Nvidia Drivers:   HTML
  • Latest ATI Drivers and Toolkit:   HTML
  • GLEW:   Windows  |  Linux  | OS X (AGL, GLX)
  • GLUT:   Download
  • Nvidia SDK:   Download
  • Microsoft DirectX SDK: HTML

  • Code Tutorial and Examples

  • CIS 665 Lecture 4 CG Demos:   Download  |  ReadMe
  • GPGPU Developer Resources:  HTML
  • Setting up a CG Project in Visual Studio and CG Syntax Highlighting:   HTML
  • Setting up CG on a Mac (BETA):   HTML
  • Detailed FBO / Ping-Pong Tutorial:   HTML
  • ATI Source Code Library:   HTML
  • NVIDIA Shader Library:   HTML
  • Shader::Tech Source Code:   HTML
  • PNG file Loader:   HTML
  • Mouse Motion Code:   CPP
  • OpenGL Error Code:   ZIP
  • Nvidia Code Examples:   HTML
  • Hello CG (Nvidia example):    PDF
  • Cg in Two pages:   PDF
  • OpenGL RedBook:   HTML
  • OpenGL Nehe Examples:   HTML
  • Suresh's Rendertexture/Passthru Example:   ZIP
  • Shadertech Source Code Archive (Medium):   HTML
  • GPGPU Reduction Tutorial (Advanced):   HTML
  • GPGPU Fast Transfers Tutorial (Advanced):   HTML
  • FBO Class:  HTML

  • GPU optimization, performance, and pseudo-debugging Tools

  • GPUBench:   HTML
  • GLIntercept:   HTML
  • GLExpert:   HTML
  • gDEBugger:   HTML
  • NVPerfKit (NVIDIA)::   HTML
  • FX Composer (NVIDIA):   HTML
  • GPU PerfStudio (ATI):   HTML
  • GPU Shader Analyzer (ATI):   HTML
  • RenderMonkey (ATI):   HTML
  • BabelShader (Translation between shading languages):   HTML
  • The Image Debugger:   HTML
  • Shadesmith Debugger:   HTML

  • Useful Links

  • GPGPU:   HTML  |  Forums
  • CUDA GPU Computing:   HTML  |  Forums   New!
  • GameDev:   HTML  |  Forums
  • ShaderTech:   HTML  |  Forums
  • GPU Programking Wiki HTML
  • SIGGRAPH Courses:   HTML

  • Acknowledgement of Sources

    Suresh Venkatasubramanian (Slides and Code)
    Dominik Göddeke (Code and Tutorials)
    Paul Kanyuk (Slides and Code)
    Aaron Lefohn (Slides and Code)
    Mark Harris (Slides and Code)
    GPGPU (Being awsome...)
    GPGPU Wiki

    Page Maintained by Joseph Kider (
    Ph.D. Student working with Dr. Norman I. Badler
    at the Center for Human Modeling and Simulation
    ©2007 Joe Kider, All Rights Reserved