Logistical information

CS 5220, Fall 2020: Applications of Parallel Computers
Meeting time: TR 8:00-9:15 (Zoom)
Backup meeting: TR 1:25-2:40 (Gather.town)

Prof: David Bindel
E-mail: bindel@cornell.edu
OH: Thu 2-4 or by appointment.

Enrollment: In order to ensure CS students are able to meet their requirements, initial enrollment in several upper-level CS courses (including CS 5220) is restricted to CIS majors. This is true even in normal years, and we have always been able to accommodate all students who wanted to take the course. If are not in CS and want to enroll, please add yourself to the wait list, and we will add you (in order) as soon as the system opens. See the CS information page on this policy.

Course description

CS 5220 is an introduction to performance tuning and parallelization, particularly for scientific codes. Topics include:

  • Single-processor architecture, caches, and serial performance tuning
  • Basics of parallel machine organization
  • Distributed memory programming with MPI
  • Shared memory programming with OpenMP
  • Parallel patterns: data partitioning, synchronization, and load balancing
  • Examples of parallel numerical algorithms
  • Applications from science and engineering

Students should be able to read and write serial programs written in C or a related language. Because our examples will be drawn primarily from engineering and scientific computations, some prior exposure to numerical methods is useful, though not necessary. Prior exposure to parallel programming is not required, and non-CS students from fields involving simulation are particularly welcome!

Course work

Lecture materials and pre-recorded videos will be posted online. We will use the 8:00-9:15 meeting time for discussion and small group activities. We do not require everyone attend the 8:00 meetings, but we do want you to work with your peers on the small group activities. We will help arrange working groups for both the activities and the programming projects.

The course work consists of:

  • Lecture activities: Lecture materials and slides will be posted online in advance of the meeting, and students should come with questions. We will devote meeting time to group activities and practical demonstrations; material for these will also be posted on the course page for those that are participating asynchronously.
  • Homework: Homework assignments are done individually, and are meant to ensure students have the basic skills needed to work on parallel machines and to modify, build, and time parallel codes. Homework will be posted on Tuesday and due the following Tuesday
  • Projects: There will be three projects that involve performance tuning of a scientific computing kernel or small code. In each case, a reference code will be provided; students are responsible for parallelizing the code, tuning it, and running performance experiments and analyses. These are more significant than the homeworks, and will run 2-3 weeks.
  • Final projects: In addition to the assigned projects, students will complete a significant final project of their own choosing. We will suggest final projects, or students may bring projects of their own. Group projects are encouraged!


The class will be taught from lecture notes, which will be posted as the class proceeds. Supplementary reading materials will also be posted.

Course discussion system

This term we will be using Piazza for class discussion. Rather than emailing me questions, I encourage you to post your questions on Piazza. If you have any problems or feedback for the developers, email team@piazza.com.

Find our class page at: http://www.piazza.com/cornell/fall2020/cs5220.

Course policies


Graded work will be weighted as follows:

  • Class participation: 10%
  • Individual homework: 15%
  • Small group assignments: 45%
  • Final project: 30%

Your participation makes the class more interesting and useful for all of us. There are several ways to participate:

  • Engaging in group activities inside or outside class
  • Actively engaging and answering questions on Piazza
  • Helping correct and clarify class notes and assignments

It is also critical for us to have your feedback about how the class is going, both to improve the class for the current semester and to make the class better for future semesters. We will solicit non-anonymous comments around the midterm, and at the end of the semester will check with the college to see who has completed course evaluation surveys (though we obviously cannot check to see whether your feedback is useful!). Participating in these feedback activities counts toward your grade.


An assignment is an academic document, like a journal article. When you turn it in, you are claiming everything in it is your original work, unless you cite a source for it.

You are welcome to discuss homework and projects among yourselves in general terms. However, you should not look at code or writeups from other students, or allow other students to see your code or writeup, even if the general solution was worked out together. Unless we explicitly allow it on an assignment, we will not credit code or writeups that are shared between students (or teams, in the case of projects).

If you get an idea from a classmate, the TA, a book or other published source, or elsewhere, please provide an appropriate citation. This is not only critical to maintaining academic integrity, but it is also an important way for you to give credit to those who have helped you out. When in doubt, cite! Code or writeups with appropriate citations will never be considered a violation of academic integrity in this class (though you will not receive credit for code or writeups that were shared when you should have done them yourself).

Academic Integrity

We expect academic integrity from everyone. School is stressful, and you may feel pressure from your coursework or other factors, but that is no reason for dishonesty! If you feel you can’t complete the work on the own, come talk to the professor, the TA, or your advisor, and we can help you figure out what to do.

For more information, see Cornell’s Code of Academic Integrity.

Emergency procedures

In the event of a major campus emergency, course requirements, deadlines, and grading percentages are subject to changes that may be necessitated by a revised semester calendar or other circumstances. Any such announcements will be posted to Piazza and the course home page.