General Purpose GPU programming, or GPGPU, takes advantage of the immense power of GPUs, not for 3D graphics, but for computation. This course is an interactive and hands-on romp through GPU hardware and GPU languages, letting you discover how best to take advantage of GPUs for their computational capabilities. The course covers programming in both OpenCL and CUDA, pointing out their similarities and differences. Topics include both the core languages and extensions, including those for double precision, and how to interface with OpenGL 3D graphics buffers. Experience with GPUs or 3D graphics is not needed; we start gently and then rapidly move forward from there.
- DAY 1
- Intro to GPGPU
- Programming in a Data Parallel Way
- Labs
- OpenCL & CUDA Basics
- GPU Hardware Intro
- OpenCL Index Spaces & CUDA Blocks
- Labs
- GPGPU Software Installation Primer
- Compiling an OpenCL Application
- Compiling a CUDA Application
- Labs
- Q & A
- DAY 2
- Host-side API
- OpenCL Language Introduction
- Labs
- Memory Hierarchies
- Warps & Wavefronts
- Labs
- Optimizing for Memory Movement
- Labs
- Q & A
- DAY 3
- Synchronization
- Error Handling
- OpenGL Integration
- Labs
- Profiling
- Labs
- Micro-benchmarking
- Labs
- GPGPU Idioms
- Application Case Studies
- Q & A
- Course Close