CS 390C: Principles of Concurrency and Parallelism

January 8, 2008


Instructors

Prof. Suresh Jagannathan                                                                               Prof. Ananth Grama
Room 3154J                                                                                                   Room 3154G
Lawson Computer Science Building                                                              Lawson Computer Science Building
Ph: x4-0971                                                                                                    Ph. x4-4694

suresh@cs.purdue.edu                                                                                      ayg@cs.purdue.edu                                                                     

Office Hours:

Tu, Th. 3-4PM

Syllabus

This course will examine the design and implementation of programming languages and computing systems that support concurrency and parallelism.  We will focus on foundations.  We will investigate techniques used to describe concurrency such as threads, events, coroutines, etc., as well as mechanisms that enforce a specific interaction and coordination model among concurrently executing tasks.  Here, we will discuss shared memory, message passing, memory models, blocking and non-blocking forms of communication.  We will also spend a significant amount of time discussing concurrency control models, and will introduce formal notions of serializability and atomicity and how these notions manifest in real languages.    Quantifying overheads and performance characteristics of parallel programs is also a subject we will study.  Some fraction of the course will be devoted to implementation studies of threading systems and schedulers.

The second part of the course will apply these foundational principles to derive concurrent data structures, non-blocking algorithms and restructuring techniques from sequential programs to parallel ones, and detailed case studies of language proposals and system designs.  Time permitting, we will discuss formal methods in concurrency including process calculi, abstractions such as continuations, dataflow, selective communication, and dependence analysis.

Requirements

Each lecture will be assigned a scribe responsible for taking detailed lecture notes available the following week.  A series of small programming projects, implementation of one large project (devised in consultation with the instructors), and a final.

Lectures

Lecture 1:   Introduction and Course Overview.
Lecture 2:   Expressive Power.
Lecture 3:   Coroutines.
Lecture 4:   Continuations and Continuation-Passing Style.
Lecture 5:   Continuations and Coroutines.
Lecture 6:   Introduction to Threads and Events.
Lecture 7:   Introduction to Message Passing.
Lecture 8:   Memory Models.
Lecture 9:   Lock-Free Algorithms.
Lecture 10:   Locking.
Lecture 11:   Data Race Detection.
Lecture 12:   Software Transactions.

Suggested Readings

Assignments

Assignment 1: Coroutines
Solutions:
   Producer-Consumer
   Samefringe

Assignment 2: Message-Passing
Solutions:
   Samefringe
   Dining Philosophers

Assignment 3: Non-Blocking Algorithms