Skip to main content

CMPT 431 : Parallel and Distributed Systems Spring 2020

Asking Questions, Getting Assistance, Giving Feedback

  • It is very important to us that you succeed in CMPT 431! Outside of lectures and sections, there are different ways to ask questions or discuss course issues:
  • Visit office hours (see below)! In addition, if you need extra time or need to discuss something in private, feel free to email and make an appointment.
  • Make a public post about course content on the , where they benefit the whole class. If other students can answer your question, you may receive a response more quickly than you would by emailing the course staff.
  • This is the best way of asking questions about homework, labs, and other class-related topics. Before posting, please search through the questions that have already been posted in case someone has already asked the same question.
  • Send to the course staff. The instructor will try to address the issue and share it with others only as appropriate, but will not have a way to reply to you without addressing the whole class.

What is the class about ?

This course explores the paradigms of parallel and distributed computing, their applications, and the systems/architectures supporting them. We will study not only how they work today, but also try to understand the design decisions and how they are likely to evolve in the future. We will draw examples from real-world parallel systems in this course.

In parallel computing, multiple processors compute sub-tasks simultaneously so that work can be completed faster. Early parallel computing has focused on solving large computation-intensive problems like scientific simulations. With the increasingly available commodity multiprocessors (like multicores), parallel processing has penetrated into many areas of general computing.

In distributed computing, a set of autonomous computers are coordinated to achieve unified goals. More interestingly the community is increasingly turning to parallel programming models (e.g. Mapreduce, Spark) to harness the capabilities of these large scale distributed systems.


Date Announcement
Feb 25 March 19,26 Class
Feb 16 Posted Ass 3 Errata
Jan 28 Office hr updated
Jan 21 Assignment 2 is up
Jan 14 Posted Ass 1 Errata
Jan 9 Arrvindh not in town
Jan 3 Ass 0 is up
Nov 10 Website is up

Course Objectives

This course is a hands-on, programming-heavy course. Expect to get down and get your hands dirty with concurrent C++ programming. We will discuss the fundamental design and engineering trade-offs in parallel systems at every level. We will begin with a primer on multicore manycore chips: chips that integrate multiple CPUs on the same die. Harnessing these new compute engines is an open challenge. We will focus on their architectures and different programming models that empower us to tap into this fountain of CPUs.

We will study synchronization, cache coherence, and memory consistency. We will look at programming abstractions such as locks, mutexes, conditional synchronization, and transactional memory. At this stage we will also be exposed to the manycore accelerators such as gaming processors and GPUs which promise 100x performance improvement for “data parallel” workloads.

Course Components:

Logistically, this course has two components.

  1. Assignments. During this course you will be expected to complete five assignements. Some of the assignments can be performed in groups. They will account for a large fraction of your grade.
  2. In-class discussion: You should aim to participate in every in-class discussion. I will do my best to track who is participating. Remember, this class will be fun and interesting if you make it so!


CMPT 225 and CS295. Solid programming skills (C++). Expert at Unix/Linux. If unsure whether you have the pre-requisites, talk to the instructor! Programming exercises will require the student to implement programs illustrating the principles used in parallelism. Moderate knowledge of C and C++ programming and the UNIX environment is assumed.

For homeworks and programming assignments, students are encouraged to consult each other, the TA, the instructor, or anyone else for that matter. However, the assistance offered or accepted should not go beyond a discussion of the problem and a sketch of a solution. You can use the following guideline: when it comes time for you to write your program or your homework paper, do not use any written material from the discussion.

If you can reconstruct the discussion and complete the solution on your own, then you have learned the material (and that is the objective of this course!). For team projects, you should make sure to identify division of labor in your README. While projects will generally be graded as a team rather than separately for each individual, corrective action could be taken.


Arrvindh Shriraman

Office Hour Appointment


  • On Tuesdays. SRYE 5125. 10:30 - 11:30
  • On Thursdays. Burnaby 9241 or Hangouts(

Teaching Assistant (please read FAQ page for email etiquette)

Office hours: Thursday 1:30 — 2:30 CSIL Lab Surrey (or on google groups).

Name: Parmida Vahdatnia Location: SRYE 4013. 13:30 — 14:20

Name: Minh Bui Location: SRYE 4013. 13:30 — 14:20

Discussion Board

Google groups (preferred medium)

To join, sign into google and then click on link. You will see a blue button: Apply to join group

Time and place

  • SRYE3016 Surrey Tuesday : 11:30-13:20

  • Thursday : (No classroom sessions)

  • Thursday Burnaby TASC 1 9241. Instructor hours (11:30 - 12:30)
  • Surrey CSIL Lab 4013. TA hours 1:30 - 2:30

Thursdays are dedicated for answering questions about assignments and to conduct tutorials (if necessary). If you are unable to meet the instructor in the Burnaby office or the TA in CSIL-Surrey, please set up google hangouts prior to the office hours.

The instructor/TA will also be actively answering questions on google groups. If you would like to show any code, please commit it to your repo on github before pointing the instructor to it.


No required textbook. Online readings provided in schedule page.


Submit homework source code and check your grades on Coursys

  • Five/Six programming assignments. (95%)
  • Class presentation and participation (5%)

Disclaimers about this web page

  • All course information on this web page is tentative and could be in error. It can also change at any time. Confirm crucial dates or information with me in person during class. Double check with SFU calendar or schedule information for official class times and final exams time and location.
  • Students are expected to attend all classes: announcements about assigned readings, homeworks and exams will be made available at the start of each class. Such announcements may not be made on this web page, so don’t rely on information here instead of attending class.