CS 87: Parallel and Distributed Computing — Spring 2020


  • Project Final Report and Presentation presentation schedule and how to upload your talk slides added to assignment page.

  • On-line class meeting information: We will meet during our regular class meeting times on-line using zoom. The zoom link for our class meeting has been posted to piazza and moodle.

    Our first class meeting will be Monday March 23 paper discussions of Paper 7 papers, at 1:15 and 3:00 EST (please adjust these times to your time zone).

    The college’s ITS page has information about zoom: ITS remote resources page.

Class announcements will be posted here and/or sent as email. You are expected to check your email frequently for class announcements. Questions and answers about assignments should be posted on Piazza. All assignments are posted to the class Class Schedule.

Class Info

Professor: Tia Newhall, Office hours: Tuesdays 3-4:30, and Fridays 2-3:30 Office: Sci 249

Class: Tuesdays 1:15-2:30, Science Center 145, Thursdays 1:15-2:30 Science Center 240

Lab Section A

Monday 1:15 - 2:45

SCI 246

Lab Section B

Monday 3:00 - 4:30

SCI 246

Course Description

This course covers a broad range of topics related to parallel and distributed computing, including parallel and distributed architectures and systems, parallel and distributed programming paradigms, parallel algorithms, and scientific and other applications of parallel and distributed computing. In lecture/discussion sections, students examine both classic results as well as recent research in the field. The lab portion of the course includes programming projects using different programming paradigms, and students will have the opportunity to examine one course topic in depth through an open-ended project of their own choosing. Course topics may include: multi-core, SMP, MMP, client-server, clusters, clouds, grids, peer-to-peer systems, GPU computing, scheduling, scalability, resource discovery and allocation, fault tolerance, security, parallel I/0, sockets, threads, message passing, MPI, RPC, distributed shared memory, data parallel languages, MapReduce, parallel debugging, and applications of parallel and distributed computing.

Class will be run as a combination of lecture and seminar-style discussion. During the discussion based classes, students will read research papers prior to the class meeting that we will discuss in class. The first half of the course will focus on different parallel and distributed programming paradigms. During the second half, students will propose and carry out a semester-long research project related to parallel and/or distributed computing.

Prereqs: CS31 and CS35 required; prior upper-level CS course experience required. Designated: NSE, W (Writing Course), CS Group 2 Course

Course Goals

  • Analyze and critically discuss research papers both in writing and in class

  • Formulate and evaluate a hypothesis by proposing, implementing and testing a project

  • Relate one’s project to prior research via a review of related literature

  • Write a coherent, complete paper describing and evaluating a project

  • Orally present a clear and accessible summary of a research work

  • Understand the fundamental questions in parallel and distributed computing and analyze different solutions to these questions

  • Understand different parallel and distributed programming paradigms and algorithms, and gain practice in implementing and testing solutions using these.

Course Structure

CS87 is a seminar-style course. Its structure is designed as a bridge from lecture-based learning to inquiry-based cooperative learning that is the norm in post-Swarthmore experiences, be it graduate studies or work in industry. Although there will be some lecture, all of the work you do in this course will be cooperative, working in partners or small groups to solve problems, to prepare for class discussion, to produce written and lab solutions, and to deliver presentations. As a result, you are directly responsible for a large part of the success or failure of this class.

Required Readings

There is no required textbook for this courses. Instead, there will be required readings from on-line resources posted to the class schedule. In addition, we will also read and discuss one or two research papers most weeks. Research paper assignments will be posted to the class schedule and also be listed off the paper reading schedule (available week 2). The paper assigments will be updated over the course of the semester, so check this page weekly.

You will be assigned to a reading group for the semester. Your reading group will meet weekly to:

  1. discuss the weekly assigned paper(s) before the in-class discussion.

  2. write Reaction Notes to the assigned papers (submit before 9am on Monday discussion day, and bring with you to class class discussion).

There may be some background readings from Dive into Systems textbook. The user name and password for our class' access to the textbook are posted to the piazza page.

Class Schedule

This is a very tentative schedule. It will be updated as we go.


Jan 20



  • Introduction to Parallel and Distributed Computing

Weekly Reading:
* Section 5.8
* Sections 1-4

Paper 1: parallel system

Lab 1: pthreads scalability


Jan 27

Drop/add ends (Jan 31)


  • Parallel and Distributed Systems

For Tuesday Read:
* "can we please get it right"
* skim Section 5


Feb 03



  • Distributed Systems

Weekly Reading:
* Chapt 11 intro
* Chapt 11.2-11.2.2


Feb 10



  • Parallel Languages

Weekly Reading:
* Section 5
* skim Chapt 11.2
* skim Chapt 10.7


Feb 17



  • Parallel Languages and Algorithms
  • GPGPU Computing

Weekly Reading:
Chapt 11.1


Feb 24



  • Parallel Algorithms
  • Distributed Shared Memory

Weekly Reading:
* skim Chapt 11.3
* Chapt 11.2 (MPI examples)


Mar 02



  • Parallel Algorithms
  • MapReduce

Mar 09

Spring Break


Mar 16



  • Spring break week 2

Mar 23

CR/NC/W Deadline (Mar 27)


  • Parallel Algorithms
  • Peer-to-Peer Systems

Mar 30



  • Distributed File Systems
  • Clusters

Apr 06

Project Proposal due by 11:59pm (EST) (Apr 07)


  • Distributed File Systems
  • Clusters

Apr 13

Project Work Week git push due due by 11:59pm (EST) (Apr 18)



Apr 20

Project Mid-Way Report due by 5 pm (EST) (Apr 24)


  • Cloud Computing

Apr 27

Project Final Report due by noon (EST) (May 08)


  • Failure
  • Security

May 13

Final Project Presentations May 13 (10am-5pm)

Project Code due (May 14)


Grades will be weighted as follows:

  • approx 35%: Class Participation, Paper discussion, Reaction Notes Each week we will discuss papers in a seminar style format. This course has some lecture content with in-class activities too, but much of the course content is generated by the class as a whole. You need to be present to contribute. Doing a close reading of the assigned papers and writing responses and questions prior to each class is essential to preparing for a lively and informed discussion. In this style of class, you are responsible for contributing to its content; what you get out of this class is dependent on what you put into paper discussions, presentations and other class participation.

  • approx 25%: Labs I will assign labs in the first part of the semester. You will do lab work with different assigned partners for each lab.

  • 40%: Course Project You will design a project related to parallel and distributed computing that you will carry out over the second half of the semester. Projects must be done in pairs or small groups; no solo projects are allowed.

About Course Work

All work in CS87 will be done with a partner or in a small group. I will assign you to a reading group and I will assign partners for the lab assignments I assign in the first part of the semester. You may pick your own project group for the course project. Project groups typically are two or three students in size. No solo course projects are allowed.

You will submit your lab solutions electronically with git: you must do a git add, commit, and push before the due date to submit your solution on time. You may push your assignment multiple times, and a history of previous submissions will be saved. You are encouraged to push your work regularly.

About the CS Labs

I encourage you to work in one of the CS labs when possible (vs. remotely logging in), particularly when working with a partner. The CS labs (rooms 240, 256, 238 and Clother basement) are open 24 hours a day, 7 days a week for you to use for CS course work. With the exception of times when a class, or lab, or ninja session is scheduled in one of these rooms, you may work anytime in a CS lab on CS course work. The overflow lab (238) is always available.

CS lab machines are for CS course work only. There are other computer lab/locations on campus that are for general-purpose computer use. Please review the CS Lab Rules about appropriate use of CS labs.

Accessing the CS labs after hours

You can use your ID to gain access to the computer labs at nights and on the weekends. Just wave your ID over the onecard reader next to the lab doors. When the green light goes on, just push on the door handle to get in (the door knob will not turn). If you have issues with the door locks, send an email to local-staff@cs.swarthmore.edu. If the building is locked, you can use your ID to enter the door between Martin and Cornell library. For this class, your ID will give you access to the labs in rooms SCI 238, 240, 256, and the Clothier basement.

Working with Partners

For partnered lab assignments, you should follow these guidelines:

  • The expectation is that you and your partner are working together side by side in the lab for most, if not all, of the time you work on partnered lab assignments.

  • You and your partner should work on all aspects of the project together: initial top-down design, incremental testing and debugging, and final testing and code review.

  • If you are pair programming, where one of you types and one of you watches and assists, then you should swap roles periodically, taking turns doing each part.

  • There may be short periods of time where you each go off and implement some small part independently. However, you should frequently come back together, talk through your changes, push and pull each other’s code from the git repository, and test your merged code together.

  • You should not delete or significantly alter code written by your partner when he or she is not present. If there is a problem in the code, then meet together to resolve it.

  • If there is any issue with the partnership, contact the professor.

Taking time to design a plan for your solution together and to doing incremental implementation and testing together may seem like it is a waste of time, but in the long run it will save you a lot of time by making it less likely that you have design or logic errors in your solution, and by having a partner to help track down bugs and to help come up with solutions to problems.

Partnerships where partners work mostly independently rarely work out well and rarely result in complete, correct and robust solutions. Partnerships where partners work side-by-side for all or most of the time tend to work out very well.

You and your partner are both equally responsible for initiating scheduling times when you can meet to work together, and for making time available in your schedule for working together.

Absence / Assignment Extension Policy

All students start the course with one "late lab" day to be used on lab assignments only at your discretion, with no questions asked. To use your extra time, you must email your professor after you have completed the lab and pushed to your repository. You do not need to inform anyone ahead of time. When you use late time, you should still expect to work on the newly-released lab during the following lab section meeting. The professor will always prioritize answering questions related to the current lab assignment.

Your late days will be counted at the granularity of full days and will be tracked on a per-student (NOT per-partnership) basis. That is, if you turn in an assignment five minutes after the deadline, it counts as using one day. For partnered labs, using a late day counts towards the late days for each partner. In the rare cases in which only one partner has unused late days, that partner’s late days may be used, barring a consistent pattern of abuse.

If you feel that you need an extension on an assignment or that you are unable to attend class for two or more meetings due to a medical condition (e.g., extended illness, concussion, hospitalization) or other emergency, you must contact the dean’s office and your instructors. Faculty will coordinate with the deans to determine and provide the appropriate accommodations. Note that for illnesses, the College’s medical excuse policy, states that you must be seen and diagnosed by the Worth Health Center if you would like them to contact your class dean with corroborating medical information.

Late days cannot be used for any written assignments or oral presentations in class. Reaction notes and all project components must be submitted on time.

Academic Accommodations

If you believe you need accommodations for a disability or a chronic medical condition, please contact Student Disability Services (Parrish 113W, 123W) via e-mail at studentdisabilityservices@swarthmore.edu to arrange an appointment to discuss your needs. As appropriate, the office will issue students with documented disabilities or medical conditions a formal Accommodations Letter. Since accommodations require early planning and are not retroactive, please contact Student Disability Services as soon as possible. For details about the accommodations process, visit the Student Disability Service Website.

You are also welcome to contact me privately to discuss your academic needs. However, all disability-related accommodations must be arranged, in advance, through Student Disability Services. To receive an accommodation for a course activity you must have an official Accommodations Letter and you need to meet with me to work out the details of your accommodation at least two weeks prior to any activity requiring accommodations.

CS Department Academic Integrity Policy

Academic honesty is required in all your work. Under no circumstances may you hand in work done with (or by) someone else under your own name. Your code should never be shared with anyone; you may not examine or use code belonging to someone else, nor may you let anyone else look at or make a copy of your code. This includes, but is not limited to, obtaining solutions from students who previously took the course or code that can be found online. You may not share solutions after the due date of the assignment or make them publicly available anywhere (e.g. public GitHub repository).

Discussing ideas and approaches to problems with others on a general level is fine (in fact, we encourage you to discuss general strategies with each other), but you should never read anyone else’s code or let anyone else read your code. All code you submit must be your own with the following permissible exceptions: code distributed in class, code found in the course text book, and code worked on with an assigned partner. In these cases, you should always include detailed comments that indicates on which parts of the assignment you received help, and what your sources were.

Failure to abide by these rules constitutes academic dishonesty and will lead to a hearing of the College Judiciary Committee. According to the Faculty Handbook:

"Because plagiarism is considered to be so serious a transgression, it is the opinion of the faculty that for the first offense, failure in the course and, as appropriate, suspension for a semester or deprivation of the degree in that year is suitable; for a second offense, the penalty should normally be expulsion."

The spirit of this policy applies to all course work, including code, homework solutions (e.g., proofs, analysis, written reports), and exams. Please contact me if you have any questions about what is permissible in this course.


Reading, Writing and Presentation Advice

Unix and Programming Resources