Parallel programming is becoming increasingly critical for computer scientists/engineers. All new machines are now parallel. There is already a movement suggesting that all students be taught parallel programming in the introductory courses, sequential programming being 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 capabilities
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.