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:

CUDA C Programming Guide


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:: Programming Assignments:

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.

Presentation

Presentation 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

[Back to home]