The course presents both the hardware and software aspects of parallel programming. Related to the hardware aspect, the course covers the fundamental architecture models of the Flynn taxonomy and the data organization principles for each category. Related to the software aspect, the course firstly provides the general principles of parallel algorithm design. Afterwards, in a more specific way, the course describes how to design and implement programs in a shared-memory programming model using POSIX threads, OpenMP and Java multi-threading. Also the course describes how to design and implement programs in a distributed-memory programming model using MPI. Finally some advanced applications of parallel programming are studied, including the n body problem, sorting and graph problems.
Course aims is to teach students the principles, models, and techniques of parallel programming, enabling them to design, implement, and analyze efficient parallel programs on shared- and distributed-memory systems.
Primary textbook: "Introduction to Parallel Programming book" by Peter Pacheco. Additinal textbook: "Introduction to Parallel Computing" by A.Grama, A.Gupta, G.Karypis, V.Kumar