COSC 89.25/189 GPU Programming and High-Performance Computing, Spring 2020
This class introduces the basic programming and algorithmic techniques for developing the modern parallel computer code for high-performance computing applications. Course topics will cover the fundamentals for GPU (CUDA) and CPU (multi-threading) parallel programming, parallel computer architecture, parallel data structures, parallelizable linear algebra, conjugate gradient and multigrid solvers, particle systems and N-body problems, and vectorization. The central part of the course lies in the design and implementation of parallel numerical systems for real large-scale computing applications. The materials will be illustrated using large-scale computing examples and applications from computer graphics, computational physics, and machine learning.
Staff:
Instructor: Bo Zhu (Sudikoff 153)
Teaching assistant: TBD
Guest lecturer: TBD
Logistics:
Class Time: 2A, Tuesday/Thursday, 2:25pm-4:15pm
X-Hours: Wednesday, 4:35pm-5:25pm
Office Hours:TBD
Location: TBD
Web:
The course information will be posted on both Canvas and the public course website.
Discussion:
We will use Piazza for our class discussion. Link posted on Canvas.
Textbook:
Prerequisite:
CS 50 or equivalent C/C++ programming background
Starter Code:
The codebase will be released on GitLab after the course starts.
Assignments and Projects:
Grading policies::There are four programming assignments during the quarter, corresponding to the parts of computer architectural foundation (week 1-2), GPU foundation (week 3-4), parallel linear solver (week 5-6), and parallel physics simulator (week 7-8). In each assignment, students are expected to implement one or multiple critical parts of the numerical algorithm taught in the lecture. A sample code will be provided for each assignment.
PresentationPresentation Students are expected to exercise two in-class presentations, including a presentation of a technical paper relevant to one of the class topics and a presentation for the final project at the end of the quarter. Also, students are required to submit a proposal for the final project before the mid-term week and have a one-on-one meeting with the professor to receive feedback.
Final Project:Students will work on a final project either individually or in a group (with up to three members). The goal of the project is to build a parallel program to solve a concrete computing problem, with some applications related to scientific computing, machine learning, or computer graphics. Students can start from one of the programming assignments and extend it to a self-contained system. But they are encouraged to start from scratch to work for their ideas. A proposal, designed with guidance from the professor and TA, is required no later than the mid-term week to ensure the project can start on time and in the right direction. An interactive and demonstrable system is required as the final output for the project. There is no limitation on the platform, programming language, or visualization tools being used. A final competition will be held in the final week, allowing students to showcase their ideas and techniques to the class, professor, and potentially external judges.
Class Schedule:
The following is a tentative lecture schedule. It will be updated dynamically as the course proceeds.
Week 1: Introduction to high performance computing and mathematical foundations
Week 2: Modern computer architecture: shared memory, threads, and GPU
Week 3: Parallel computing programming models: SIMD
Week 4: GPU Practice I: introduction to CUDA C/C++ programming
Week 5: GPU Practice II: CUDA C/C++ advanced topics
Week 6: Multi-core CPU: multi-threading and MPI
Week 7: Parallel data structure: grid, particles, and game physics
Week 8: Parallel linear solver: conjugate gradient and multigrid
Week 9: Application: large-scale scientific computing and physics simulation