Hands-on Labs

As mentioned on the welcome page, this course requires a basic knowledge of CUDA (e.g., see the Introduction to CUDA short course). The purpose of these hands-on labs is to help you learn some useful algorithmic techniques for GPU programming.

Please make sure you meet the software requirements before continuing with these hands-on lab exercises.

The lab manual for this course includes the following hands-on exercises and additional information:
  • Hands-on Lab 0: Initial login, package download, and environment set-up
  • Hands-on Lab 1: 2D Blocking and Register Tiling (Stencil Code)
  • Hands-on Lab 2A: Data Layout Transformation
  • Hands-on Lab 2B: Binning with uniform distributions
  • Hands-on Lab 3: Binning for non-uniform data distribution
These hands-on labs complement the Proven Algorithmic Techniques for Many-core Processors course. The lab manual includes an introductory lab, followed by several well-known problems like 7-point stencil computation, Lattice-Boltzmann method, Columbic potential calculation, and MRI reconstruction.

For students with different levels of understanding of CUDA programming, we provide four hands-on labs, each of which reinforces one or several algorithmic techniques and optimizations. Lab 0 and Lab 1 are for the first hands-on lab section. Labs 2A and 2B are for the second lab section. Lab 3 is for the third lab section. Most labs are designed with varying levels of difficulty. We suggest that you choose the difficulty level that best fits your programming skills. You can advance your level of difficulty as time permits.

Solutions to the lab exercises are provided.

Acknowledgments

The following graduate students from the University of Illinois at Urbana-Champaign contributed to the creation of these lab materials:
  • Nasser Anssari
  • Li-Wen Chang
  • Hee-Seok Kim
  • Deepthi Nandakumar
  • Nady Obeid
  • Chris Rodrigues
  • John Stratton
  • Ray Sung
  • Xiao-Long Wu
We thank you for your generous contributions to this course!