Logistical information

CS 5220, Fall 2017: Applications of Parallel Computers
Lecture time: TR 8:40-9:55
Lecture location: Gates G01

Prof: David Bindel
425 Gates Hall
Phone: 607-255-5395
E-mail: bindel@cs.cornell.edu
OH: W 1:30-2:30, Th 10-11 or by appointment.

TA: Eric Hans Lee
Email: erichanslee@cs.cornell.edu
OH: Tuesday 11-12 Gates G11 and Thursday 11-12 Gates G15, or by appointment.

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

The course work consists of:

  • Lecture: Participation is expected! Notes will be posted online in advance of the meeting, and students should come with questions. The last 15 minutes of each 75 minute period will be devoted to a “mini-practicum” in which we do live coding demonstrations and hands-on demonstrations of software tools.
  • 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! Final project proposals will be due immediately after fall break, and groups are expected to make steady progress on the project in November and early December. The last two lectures are reserved for project presentations, with a final project report due on December 7.


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/fall2017/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:

  • Answering questions in 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.