CIS*3090 Parallel Programming

Skills and knowledge students should have prior to beginning the course:
Course Topics:

Today's computer science students are entering a new era in parallel computing, featuring cheap multicores and high-performance clusters, but have received traditional largely-sequential training. This paradigm shift has been called “the end of the lazy programmer era.” This course is aimed at helping soon-to-graduate students (1) move into jobs using current tools for parallel programming, and (2) acquire the theoretical background needed to keep abreast with rapid industry developments and to evolve with them. The textbook will provide foundational knowledge about modern parallel processor architectures and algorithms for organizing concurrent computations. Since parallel programming is all about speed, we will learn ways to measure execution performance and speedup through parallelization.

In terms of practical skills, high-performance (non-shared memory) cluster programming will be introduced via the University of Guelph Pilot library, based on MPI and utilizing message-passing. Programming for multicore shared memory processors will utilize the popular existing parallel programming technique of POSIX threads, and compiler-based OpenMP, supported by the latest suite of Intel tools, as well as Java threads. Heterogeneous architectures–GPUs (graphics processing units) and the Intel Xeon Phi–will be introduced.

  1. Historical perspective on concurrency in computing
  2. Parallel computer system architectures
    • Abstractions for modeling sequential and parallel computation
    • Homogeneous vs. heterogeneous multiprocessors
    • Shared vs. non-shared memory systems
  3. Performance: speedup, Amdahl's Law, measurement, performance losses, difficulties in scaling
  4. Abstractions and algorithms for parallel program design: task vs. data parallelism, scalable parallelism, reduce and scan, work assignment
  5. Practical programming: message passing, Pilot library, POSIX threads, OpenMP, Java threads
  6. Overview of CUDA and OpenACC for GPU programming
  7. Overview of Intel Xeon Phi coprocessor
  8. Future directions in hardware and software
Course Format:
Method of evaluation: