I created this long-overdue course because it is essential that students who get a degree in computer science know something about how to design parallel algorithms, and to have some practical experience in writing parallel programs. In 2008, the Joint ACM/IEEE Computer Socieyt Task Force on Computing Curricula, in their report, Computer Science Curriculum 2008, considered parallel computing to be an elective knowledge area for the undergraduate student. In 2013, the Task Force made this a core competency. This change was a second reason for the creation of this course.
The course is an introduction to parallel algorithms and parallel programming in C and C++, using the Message Passing Interface (MPI) and the OpenMP application programming interface. It also includes a brief introduction to parallel architectures and interconnection networks. It is both theoretical and practical, including material on design methodology, performance analysis, and mathematical concepts, as well as details on programming using MPI and OpenMP.