
Home
Schedule
Reading List
Computing
Grading
|
CS 431 : Programming Parallel Systems
|
Fall 2016
Instructor Arrvindh
Shriraman
Office : Surrey: SURR 4134, Burnaby: TASC 1 9241
Email : 
Instructor office hours: Fridays (14:30 - 15:30pm starting Jan 15th)
T.A :
Email : nvedula@sfu.ca (or Google groups email: )
TA office hours: Wednesdays (13:30-14:30). TA will be at TASC 1
8208. Starting Jan 15th.
URL:
http://www.cs.sfu.edu/~ashriram/courses/courses/CS431/
Google Groups: Link to groups
|
|
What is the class about?
This course explores the paradigms of parallel and
distributed computing, their applications, and the
systems/architectures supporting them. 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 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., Google's Mapreduce,
Microsoft's Dryad Linq) to harness the capabilities of these
large scale distributed systems.
We will begin with a primer on multicore manycore chips: chips that
integrate multiple CPUs on the same die. Currently, Intel is
shipping 10 core (20 thread chips) and our own AMD servers are 2
socket 24 thread systems. 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 studyr 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.
We will examine the parallel computing models like MPI and Mapreduce
customized to distributed systems. Finally, we will perform case studies
of practical distributed systems and devote significant attention
to cluster-based server systems in large Internet data centers
(e.g., those running Google services).
|
Prereq
Undergraduate operating systems course (CMPT 300), basic computer
architecture course, solid programming skills (C/C++/Java). If unsure
whether you have the pre-requisites, talk to the instructor!
Comparison with prior offerings of CMPT 431 ?
We will focus explicitly on parallel systems and programming parallel systems. Expect to learn
about cache coherence and memory consistency in detail. Architectures of various parallel systems, multcores, manycores, GPUs and Google clusters. Programming models for parallel and
distributed systems (i.e., Mapreduce, MPI, Transactional Memory and more...)
|
When and Where
Class: Friday (12:30-14:20). Wednesday: TA hours (13:30-14:30)
Class only on Fridays. Wednesdays are contact hours with TAs . For assignments. No class unless indicated. Instructor hours in office. Please mail instructor to ensure you have a slot.
|
|
|