Parallel programming is increasingly critical for computer scientists and engineers. All modern machines are parallel, and there is a movement to teach parallel programming in the introductory courses, with sequential programming being viewed as a special case. However, parallel programming is not easy.
This course will teach you the basic concepts of designing, writing, debugging, and analyzing parallel programs. It covers the two main paradigms: shared memory (on CPUs and on GPUs), and message passing. We will also examine a number of parallel algorithms for a range of problems.
This semester, CS475 will be combined with CS575, Parallel Processing. The lecture material will be largely shared, there may be special advanced lectures, covering material that is optional (extra credit) for students in CS475. In addition, each assignment will have such extra credit questions.