CS-735/835: Introduction to Parallel and Distributed Programming

(The syllabus can be downloaded as a pdf.)

Next offered: Spring 2018

Catalog description

Programming with multiple processes and threads on distributed and parallel computer systems. Introduces programming tools and techniques for building applications on such platforms. Course requirements consist primarily of programming assignments. Prereq: CS 520.


Parallel and distributed computing have become mainstream and demand to be covered in both the undergraduate and graduate curricula. Revised curricula from the NSF (2012)—“we must now prepare [students] for the very dynamic world of parallel and distributed computing”—and the ACM (2013)—“parallel and distributed computing has moved from a largely elective topic to become more of a core component of undergraduate computing curricula”—have given a more prominent place to these topics.

This course is an introduction to parallel and distributed computing from a programmer’s standpoint (see CS-745/845 for a more abstract/theoretical viewpoint). It covers fundamental concepts (e.g., locking, atomicity, parallelism) and a few more advanced ones (e.g., non-sequentially consistent memory models, non-blocking algorithms) through examples. Students complete several programming assignments and a multi-threaded client-server project. The course uses Java, its java.util.concurrent library and its support for Remote Method Invocation, but similar concepts are found in most modern programming environments (e.g., Java’s interfaces Future and Executor are found in Python as classes by the same names and Python’s ‘pickle’ and JSON modules are used when Serializable would be used in Java).

The course does not assume prior knowledge of Java threads. However, it assumes that students can read and write Java code, understand basic concepts of object-oriented programming and can implement, test and debug a medium-sized Java application. Students should also be at least familiar with the concept of thread (or process) and parallelism (through an operating systems course, for instance). Coursework is identical for graduate (CS-835) and undergraduate (CS-735) students, but graduate students need to achieve at least a B grade to pass the course.






Five programming assignments (50%), one project (30%) and one exam (20%).

Minimum score for each grade: A: 90, A: 87, B+: 83, B: 80, B: 77, C+: 73, C: 70, C: 67, D+: 63, D: 60, D: 57.




Additional (for students new to Java):