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

(The syllabus can be downloaded as a pdf.)

Next offered: Spring 2021

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”—, 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”—, and ABET (2018)—“the curriculum requirements specify […] exposure to […] parallel and distributed computing”—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., race conditions, atomicity, locking) and a few more advanced ones (e.g., non-sequentially consistent memory models, non-blocking algorithms, functional concurrent programming) 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.

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 (20%), quizzes (15%) and one exam (15%).

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.

ABET Outcomes

ABET Curriculum




Additional (for students new to Java):