• Final Project components due: (see details for what is due for each part here: Project Part3 Assignment Page)

    • Final Reoprt: Due Tuesday Dec. 19 before 5pm. hand in hardcopy and push to repo. (see the Written Report link on the assigment page for more details)

    • Final Project Demo: Due this week. (see the Project Demo link on the assigment page for more details, and a link to sign-up for a slot)

    • Final Project Code: Due Wed Dec. 20 by 5pm.

    • Post Project Survey, Due Thurs Dec. 21 by 5pm. Link to survey was emailed to you.

  • Office hours for reading and finals week:

    • Wed Dec. 13, 2-3pm, 5-6:30pm

    • Thurs Dec. 14, 11-12:30, 2:30-4pm

    • Mon Dec. 18 noon-1pm, and during unfilled Demo slots on Monday

    • by appointment

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 EdStem page. All assignments are posted to the class Class Schedule. Here is a shortcut link to the current week’s assignments

Class Info

  • Professor: Tia Newhall,

  • Office hours: Tues 4-5, Wed 2-3, and by appointment, Sci 249

  • Class Meetings:

    • Paper Discussion: Mondays, Section A: 1:15-2:45, Section B: 3:00-4:30, Sci 246

    • Lecture: Tuesdays, 1:15-2:30, Sci 104

    • Lab: Thursdays, 1:15-2:30, Sci 240

  • EdStem: Q&A Forum

  • GitHub: CS87 Swarthmore GitHub Org

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 work in this class is cooperative. This includes working in small groups to solve problems, to prepare for class discussion, to produce solutions to written and lab assignments, to deliver presentations, and to carry out all parts of the course project, The result of this type of course structure is that you are directly responsible for a large part of the success or failure of this class.

Class Schedule

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


Sep 04



  • Introduction to Parallel and Distributed Computing

Weekly Reading:

Lab 0: resources review for CS87

Paper 1: PDC system report

Lab 1: Scalability study


Sep 11



  • Parallel and Distributed Systems

Weekly Reading:


Sep 18

Drop/add ends (9/18)


  • Distributed Systems

Weekly Reading:


Sep 25



  • Parallel Languages

Weekly Reading:


Oct 02



  • Parallel Languages and Algorithms
  • GPGPU Computing

Weekly Reading:


Oct 09



  • Parallel Languages/Algorithms
  • MapReduce

Weekly Reading:


Oct 16

Fall Break


Oct 23



  • Parallel Algorithms
  • Peer-to-Peer Systems

Weekly Reading:


Oct 30



  • Parallel Algorithms
  • Clusters
  • Distributed File Systems

Weekly Reading:


Nov 06

Project Proposal Due (Nov 09)


  • Parallel Algorithms
  • Peer-to-Peer Systems

Nov 13



  • Project Work Week

Nov 20

Proj Midway Pres (Nov 21)

Proj Midway Report (Nov 22)

Thanksgiving break (Nov 23)


  • Distributed Algorithms

Nov 27



  • Green and Cloud Computing
  • Distributed Systems
  • Time in Distr Sys


Dec 04



  • Edge Computing
  • Distributed File Systems

Dec 11

Proj Pres (Dec. 11, 12)

Proj Pres (Dec. 11, 12) (Dec 12)


  • Project Presentations

Dec 18

Proj Demo (this week)

Proj Report (Dec 19)

Proj Code (Dec 20)


  • Project Report, Demo, Code

About Course Work/Policies

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 in the first half 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.

Most lab solutions you will submit 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.

Some assignments have additional submission requirements.

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 also be some on-line background readings off the Class Schedule related to the weekly assigned paper(s).

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.

Info about CS lab machines

A list of CS lab machines specs is available here: CS lab machine specs

To see a listing of which machines are in which lab, look at hosts files:

cat /usr/swat/db/hosts.bookstore     # list machines in Cothier
cat /usr/swat/db/hosts.mainlab       # list machines in 240
cat /usr/swat/db/hosts.256           # list machines in 256
cat /usr/swat/db/hosts.overflow      # list machines in overflow

To find the lab in which a machine is located run whereis:

whereis orange
  orange has been located in the OVERFLOW lab (238)
whereis oil
  oil has been located in the MAIN lab (240)

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 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.

    At the end of a joint editing session, or as you change roles within a session, make sure that the "driver" does a git add, git commit and git push to push your changes to your shared repo, and your partner does a git pull to grab them so that both you and your partner have the latest version of your joint work in your local copies of your repo.

  • 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 they are not present. If there is a problem in the code, then meet together to resolve it.

  • 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.

  • If there are any issues with your partnership that you are unable to resolve, please come see me.

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.

Absence / Assignment Extension Policy

All students start the course with 2 "late lab" day to be used on lab assignments only at your discretion, with no questions asked. You may not use late days on any other course work; all other course work must be submitted by its due date.

To use a late day on a lab assignment, 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 via email at 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.

Academic Integrity Policy

The 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. Discussing ideas and approaches to problems with others on a general level is encouraged, but you should never share your solutions with anyone else nor allow others to share solutions with you. You may not examine solutions belonging to someone else, nor may you let anyone else look at or make a copy of your solutions. This includes, but is not limited to, obtaining solutions from students who previously took the course or solutions that can be found online. The use of generative AI (e.g., chatGPT or GitHub CoPilot) is also considered to be unauthorized collaboration with an outside source and is a violation of our academic integrity policy.

You may not share information about your solution in such a manner that a student could reconstruct your solution in a meaningful way (such as by dictation, providing a detailed outline, or discussing specific aspects of the solution). You may not share your solutions even after the due date of the assignment.

In your solutions, you are permitted to include material which was distributed in class, material which is found in the course textbook, and material developed by or with an assigned partner. In these cases, you should always include detailed comments indicating on which parts of the assignment you received help and what your sources were.

When working on tests, exams, or similar assessments, you are not permitted to communicate with anyone about the exam during the entire examination period (even if you have already submitted your work). You are not permitted to use any resources to complete the exam other than those explicitly permitted by course policy. (For instance, you may not look at the course website during the exam unless explicitly permitted by the instructor when the exam is distributed.)

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.

This policy applies to all course work, including but not limited to code, written solutions (e.g. proofs, analyses, reports, etc.), exams, and so on. This is not meant to be an enumeration of all possible violations; students are responsible for seeking clarification if there is any doubt about the level of permissible communication.

The general ethos of this policy is that actions which shortcut the learning process are forbidden while actions which promote learning are encouraged. Studying lecture materials together, for example, provides an additional avenue for learning and is encouraged. Using a classmate’s solution, however, is prohibited because it avoids the learning process entirely. If you have any questions about what is or is not permissible, please contact your instructor.

In CS87 all of your work is collaborative, and you may share anything with your collaborators. If you use tools, solutions, ideas, or resources from other sources in your project, you must credit those sources. Reaction notes should be your interpretation of the work in the papers. Cutting and pasting content from the papers as your reactions violates the academic integrity policy.

Please contact me if you have any questions about what is permissible in this course.


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.


Unix and Programming Resources