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 |
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.
Logistically, this course has two components.
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.
[Location:]
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
Google groups (preferred medium)
To join, sign into google and then click on link. You will see a blue button: Apply to join group
SRYE3016 Surrey Tuesday : 11:30-13:20
Thursday : (No classroom sessions)
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