Parallel programming is becoming increasingly critical for a computer
scientist/engineer. All new machines are now parallel. There is already a
movement that suggests that all students be taught parallel programming in the
introductory courses, with sequential programming viewed as a special case.
However, parallel programming is not easy. For current CPUs it requires
awareness of the multicore architecture, the cache hierarchy, and in some
cases the vector floating point capabilitites .
This course will teach you the basic concepts of designing, writing, debugging, and analyzing parallel programs. It covers the two main paradigms: shared memory, and message passing. We will also examine a number of parallel algorithms for a range of problems.