Graphics Processing Units (GPUs): Architecture and Programming

Prof. Mohamed Zahran   (aka Prof. Z)
mzahran AT cs DOT nyu DOT edu
 Wednesdays: 7:10PM — 9:00PM   WWH 317
                                                                           Office Hours (WWH 320): Tuesdays 4:00-6:00pm                                                                                      


Welcome students! ... to the Graphics Processing Units course, edition Fall 2014.  I will keep updating this page regularly. If you have questions related to this course feel free to email me. Here is some basic information:

This course examines the architecture and capabilities of modern GPUs (graphics processing unit).
Many computations can be performed faster on the GPU than on a traditional CPU.  
This is why GPUs exist now in almost all computers (from tablets to supercomputers);
and the majority of Top 500 supercomputers in the world are built around GPUs.
GPUs are now used for a diverse set of applications not only traditional graphics applications.
This introduces the concept of general-purpose GPUs or GPGPUs.
In this course, we will cover architectural aspects of modern GPUs. We will also learn how to program GPUs to solve different type of problems and how to make
the best use of its hardware.
Final exam:  Dec 17, 7:10-9pm Room 317

Mailing List

Sign up for the Mailman mailing list for the course, if you have not done it already. You can manage your subscription by clicking here.
Please follow the mailing list etiquette. 


Date Title Readings Comments
1.   9/3 Gentle Introduction to GPUs   chp 1
2.   9/10 GPGPUs: Evolution and Hardware Perspective chp 2 and this paper
  • hw 1 assigned
3.   9/17 CUDA: Introduction chp 3
  • hw 1 due
4.   9/24 CUDA: Threads chp 4
5.   10/1 CUDA: Memory chp 5
  • lab 1 assigned
6.   10/8 GPU Performance chp 6
  • lab 1 due
  • hw2 assigned
7.   10/15 Parallel Patterns and Performance Considerations skim chps 8, 9 and 10
  • proj.  def. report due
  • hw2 due
8.   10/22 Advanced Techniques in CUDA
  • lab 2 assigned
9.   10/29 Multiple GPUs in the system and Heterogeneous system papers:  1,  2 and 3   
  • proj. survey and design due
10. 11/5 OpenCL  chp 14  and this tutorial
  • hw3 assigned
11. 11/12 OpenCL (cont'd)
  • hw3 due
12. 11/19 What is next? hardware  -  software
13. 11/26 Putting it All Together
  • proj. final report due
14. 12/3 Revision  old exam 1 (sol)  - old exam 2 (sol)

CUDA Tool  

Assignments (non-programming)

Assignment 1: Due  Sep 17th, 2014 - solutions - comments

Assignment 2: Due Oct 15th, 2014  - solutions - comments

Assignment 3: Due Nov 12th, 2014 - solutions - comments

Programming Assignments

To setup you machine to work with out CUDA cluster:
First, login to your CIMS account
Once logged in, ssh to cuda1 
Now,  you can get setup running CUDA code by following these instructions:
cp -r /usr/local/pkg/cuda/current/sdk ~/nvidia_sdk
cd ~/nvidia_sdk
cd bin/linux/release


Suggested projects (but feel free to suggest your own):

Interesting Links (Geeky stuff about GPUs)

GPUs in general:
GPU Computing
First  digital 3D rendered film (Thanks William Ward)
Interview with Ed Catmull (Thanks William Ward)
NVIDIA GPU computing seminars
GPU accelerated machine learning (Thanks Darshan Hegde for the link)
Intel Graphics

Nice summary of optimizations (Thanks to Darshan Hegde )
CUDA C programming guide
CUDA C Best Practices
CUDA occupancy calculator
For CUDA developers
Series of CUDA articles at Dr. Dobb's

OpenCL 2.0 reference card

GPU Simulators and Tools:
Multi2sim (simulates both GPUs and multicore)
GPUOcelot (dynamic compilation for PTX)