Parallel Programming and Performance Engineering Fall 2026 (EN 601.420/620)

Schedule

TTh 4:30 pm - 5:45 pm, Hackerman Hall B-17. Zoom link with password can be found in Canvas.

Note to students trying to enroll

In prior years, we have had the experience that all interested students have gained entry into the class eventually. There tends to be some melt of enrolled students in the second week of classes. If you are interested in taking the course, please email the instructor letting them know your intent. Then attend lectures and keep up. It will likely work out. No guarantees.

Course Description

This course guides the learner to write efficient software with focus on exploiting hardware parallelism and efficient memory usage. Modern microprocessors are remarkably complex and implement parallelism at many levels, including instruction level, vectorization, pipelining, multicore, and memory. Simple or naïve implementations realize only a fraction of the performance available. Exploiting the capabilities or processors require an understanding of algorithms, computer architecture, systems (compilers, PL, OS) and how they interact. The course programs mostly in C/C++, because most performance-oriented software is written in these languages. It will also touch on at parallel programming in Python and CUDA for GPUs.

Prerequisites:

  • Intermediate Programming (EN 601.120 or the equivalent)
  • Data Structures (EN 601.226 or the equivalent)
  • Computer Systems Fundamentals (EN 601.333 or the equivalent)

The course has a repository of course materials and examples pppe26-public.

Comments on the 2026 Edition

This course replaces Parallel Computing for Data Science as it was taught from 2022–2024. It shares the same course number and you cannot receive credit for both.
The new syllabus changes the focus of the course:

  • Parallelism is considered from the processor through multicore and GPU. Any material related to distributed computing has been removed.
  • The course has new a focus on performance engineering, including code-generation, code-optimization, and profiling.

Most importantly, the course is designed for your to use AI as a partner. Programming is a deceptive word at present. You will write almost no code, unless you want to. AI will generate almost all the code. So programming becomes the process of supervising code generation from a model. This has a lot of merit. In past versions of this course, the complexity of PL, tools, assembly code, syntax was a huge barrier. We are going to do cover the same set of topics at a level of depth and complexity that was unimaginable when this course was taught in 2024.

This course is all about the concepts. We will use multiple languages (C, C++, Python, Java, R, Rust, Assembly) and many tools and frameworks (OpenMP, Cilk, intrinsics, CUDA). You do not need to know any of these. You will need to be able to read and understand the generated code and AI is a good partner in doing so.

You will be responsible for understanding AI’s implementation as it relates to the concept or learning goal for course examples and homework

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

Lecture Recordings and Attendance

All lectures will be available for synchronous delivery on zoom. All lectures will be recorded and will be available on Panopto on Canvas within 24 hours. The course is designed for in-person delivery.

Course Staff

Instructor

Randal Burns, randal@jhu.edu, http://www.cs.jhu.edu/~randal/

  • Office Hours: TBA
Teaching and Course Assistants

TA office hours will be held in TBD.

Jung Yoon, jyoon73(at)jhu.edu

  • Office Hours: TBA

Maximus Berner, mberner2(at)cs.jhu.edu

  • Office Hours:

Grading

The course will includes at least six rogramming activities that span one to two weeks of course time. Activities will be graded for completion of the assignment. Activities that are incomplete or do not fulfill the stated objectives may be resubmitted with permission from the instructor. The goal of the activities is for the student to gain skills with the algorithms, programming tools, and principles presented in the class. Answers that are incorrect or programs that do not meet the assignment objectives will be either (1) be marked as incorrect to provide feedback to the student or (2) be returned to the student for resubmission. Every student will have the opportunity to receive all credit for all activities. Activities makes up 40% of the course grade.

The course has two exams: a midterm and a final. Each exam counts for 30% of the course grade.

The final letter grades do not depend solely on the achievement of a target score over all assignments and exams. Grades will be determined based on the achievement of learning goals. The course staff will determine a map of total scores to grades at the end of the semester. This policy lets instructors account for variance in exam scores, specifically when the exam scores are lower than intended or expected by the instructors. Grades will start with the following guidelines:

  • 93.% or more -> A
  • 90% - 93.3% -> A-
  • 86.6% - 90% -> B+
  • 83.3% - 86.6% -> B
  • 80% - 83.3% -> B-
  • less than 80% -> TBD based on evidence of learning

The instructors may choose to move the grade boundaries down, i.e. move the A- threshold from 90% to 87% based on how the course realized learning goals. We will not move the thresholds up.