This course is an intermediate graduate course in the area of parallel programming.
In the first part of the course, we will briefly introduce the architecture of parallel systems and the concept of data dependencies/races. The three most commonly used parallel programming paradigms (shared memory, distributed memory and data parallel) will then be examined in detail. An overview of automatic parallelization of programs and the use of parallel processing in related domains such as parallel and distributed database transaction processing will also be given.
In the second part of the course, selected research topics will be examined. This part of the course consists of student-led discussions of relevant research papers. A research-intensive group project in an area related to program parallelization is a fundamental part of the course.
The projects can be done individually or in small teams of two or three people. The project outcome will be presented in a class session at the end of the semester.