CSCI-GA.3033-004

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                                                                                      


Announcements

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. 

Lectures


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  - old exam 2

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
make
cd bin/linux/release
./deviceQuery
./bandwidthTest



Project

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

Interesting Links (Geeky stuff about GPUs)

GPUs in general:
NVIDIA GPUs
GPU Computing
GPGPU
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

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

OpenCL:
OpenCL
OpenCL 2.0 reference card


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