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.