Parallel Programming (EN 601.320/420/620)

Course Description

This course prepares the programmer to tackle the massive data sets and huge problem size of modern scientific, cloud, and enterprise computing. Students taking this course will abandon the comfort of serial algorithmic thinking and learn to harness the power of cutting-edge software and hardware technologies. The issue of parallelism spans many architectural levels. Even “single server” systems must parallelize computation in order to exploit the inherent parallelism of recent multi-core processors and many-core accelerators. The course will examine different forms of parallelism in four sections. These are: (1) massive data-parallel computations with Dask, Hadoop! and Spark; (2) programming compute clusters with MPI; (3) shared memory parallelism with threads and OpenMP; and, (4) GPU parallel programming with machine learning toolkits. The course is designed to be suitable for second-year undergraduate CS majors and undergraduate and graduate students from other science and engineering disciplines that have prior programming experience. [Systems]

Prerequisite: EN 601.120, 601.226, and 601.333 (variances allowed with instructor approval).

Students may receive credit for one of 601.320, 601.420, or 601.620.

Students are responsible for all material and announcements on this course Web page and Piazza.

Academic Conduct

The guidelines of Johns Hopkins’ undergraduate ethics policy and graduate student conduct policy apply to all activities associated with this course. Additionally, students are subject to the Computer Science Academic Integrity Code.

Students are are encouraged to consult with each other and even collaborate on all programming assignments. This means that students may look at each other’s code, pair program, and even help each other debug. However, each assignment also involves questions that analyze the assignment and connect the program to course concepts. The answers to these questions must be prepared independently by each student and must be work that is solely their own.


MW 4:30 pm - 5:45 pm, Shaffer 301


Randal Burns, randal(at),

  • Office: Malone 160
  • Office Hours: Tuesday 12-1 pm, Wednesday 3-4 pm, after class by appointment.

TA/CA Office Hours: See Course Schedule and Assignments


There is no specific formula for grading. Prof. Burns looks at several indexes over the class performance and then factors in class participation and evidence of learning trajectory to make a final decision that is subjective, but informed by statistics. There is no curve. Each student earns a grade that reflects their individual learning and performance in the class.

Requests for Regrades

A student should only request a regrade of an assessment if a technical error was made in grading. In this case, the student must clearly document the technical error associated with a specific problem and submit a written request for a regrade. Once an assessment grade is released, you will have two weeks to submit a regrade request.

Textbooks used in Course

These are mostly for reference. The course does not follow a textbook.

Mattson, T. G., B. A. Sanders, and D. L. Massingill. Patterns for Parallel Programming. Addison-Wesley, 2004. This text is available online to Hopkins students

Herlihy, M. and N. Shavit. The Art of Multiprocessor Programming. Morgan-Kaufmann, 2008. This text is available online to Hopkins students

Midterm Exam: Monday March 9, 2020

Final Exam: Wednesday May 6, 2020. 2–5 pm. Shaffer 301.