Course Syllabus

COSC 273: Parallel and Distributed Computing, Spring 2021

Basic Information

Instructor Will Rosenbaum

Meetings

  • Lecture M/W/F 10:00–10:50, SCCE A131
  • Office Hours, SCCE C216
    • Drop-in M/W/F 10:50–11:30
    • By Appointment: TBD
Official Course Description

Computers are becoming increasingly parallel, with many cores or processors working concurrently to perform a single task. In order to utilize the full power of modern computers, it is essential to write programs that exploit parallelism. Yet utilizing the power of parallelism requires different ways of reasoning about problems, and parallelism introduces subtleties not present in sequential (i.e., non-parallel) programming. This course will introduce you to the art and science of writing parallel programs. We will consider both practical and theoretical aspects of parallel computing, and create software that is many times faster than any sequential program performing the same task.

Expected Background

You are expected to be comfortable writing programs in the Java programming language. In particular, we will readily use object oriented design, the class hierarchy (keyword extends), interfaces (keyword implements), exception handling, and generics (i.e., the main topics covered in COSC 112). You should be familiar with basic data structures—linked lists, stacks, queues, balanced trees—and know their supported operations as well as the efficiency of these operations.

Text and Topics

Primary text: The Art of Multiprocessor Programming by Herlihy, Shavit, Luchangco, and Spear. A digital version will be available from the course reserves on the Moodle site. Additional readings will be linked to from the course website.

The core topics covered in the course include:

  • multithreaded programming in Java,
  • mutual exclusion,
  • concurrent objects,
  • locks and contention resolution,
  • blocking synchronization,
  • concurrent data structures (linked lists, queues, stacks, hash tables, and sets, skiplists and balanced search)
  • scheduling, work distribution, and barriers,
  • data parallelism (MapReduce and streams),
  • SIMD parallelism/vector operations.

As time allows, we may cover additional topics such as the theoretical foundations of shared memory, sorting networks, fault tolerance, message passing models, and distributed graph algorithms.

Course Structure and Policies

Meetings

The class meets three times a week for 50 minutes. Class meeting time will be divided between lecture components and small group activities. As indicated on the schedule on the course website, some activities will require you to program in class. On these days, you should bring your laptop computer with you to class. In order to facilitate discussion, it is crucial that you prepare for the lecture sessions by reviewing the course materials before the lectures—relevant materials will be indicated on the course schedule.

Coursework & Evaluation

The coursework for this class will consist of coding/lab assignments, written/theoretical assignments, quizzes, and a final project. Additionally, you will be expected to actively participate in the synchronous lecture sessions, and meet weekly in small groups outside of class. (If you are unable to regularly attend the synchronous sessions, please be in touch with the instructor during the first week of class.)

  • Coding/Lab Assignments (~20%)

    Coding/lab assignments will be assigned bi-weekly, for a total of approximately 6 assignments. These programs will be relatively small-scale assignments implementing ideas discussed in lecture. You are encouraged to discuss lab assignments with your peers on a conceptual level, however you should not share code on these assignments. Monday lab sections will be devoted to discussing these assignments.

  • Written/Theoretical Assignments (~20%)

    Written assignments will also be assigned bi-weekly. They will cover more theoretical/conceptual material from the class. You are encouraged to collaborate on these assignments. In particular, you may work in small groups (up to 4 students) and submit a single assignment for the group.

  • Written Quizzes (~20%)

    Each week you will have a short quiz, typically related to the conceptual material covered in lectures.

  • Class Participation and Group Work (~10%)

    You will be expected to regularly participate in class discussion. There will also be pair or small group activities to be completed in class.

  • Final Project (~30%)

    You will have an open-ended group final project for the course. You may work in groups of up to 4, and the topic of the project is entirely up to your group. The only requirement is that your project must employ parallel programming and analyze effect of parallelism on your program’s performance. In addition to the program itself, you will submit a project proposal (around mid-way through the term), a proof of concept (a few weeks before the end of the term), and a detailed report that describes your program and indicates how parallelism was employed.

Collaboration

The coursework will consist of a mixture of group and individual assignments. You are encouraged to discuss and collaborate throughout the course, although specified assignments should be completed individually.

Individual Work

All quizzes and individual assignments must be submitted individually. For the quizzes, you are encouraged to study/prepare in groups. However, once you begin a quiz, you are expected not to communicate with others (in the class or otherwise) until you submit the quiz. You should not discuss the contents of a quiz with anyone who has not yet completed the quiz.

For individual coding assignments, you are encouraged discuss the problems and work together on a conceptual level. However, you are expected to write and submit your own code. In particular, you may not share your code for lab assignments with fellow students, nor ask other intelligent beings (human or not) to write code on your behalf.

Small Group Work

Written assignments and the final project can be completed by groups of up to 4 students. For the written assignments, a single document should be submitted for the group. The document should indicate the role of each student in preparing the submission, or indicate that all students share equal responsibility for the submission. If the group members feel that they deserve unequal credit for the assignment, this should be indicated on the submission as well.

Attendance and Illness

You are expected to attend class regularly and actively participate in class discussion.

All students are expected to follow college guidelines and policies regarding COVID testing and masking.

  • Unless you are sick or unable to attend, you should come to class.
  • If you are sick, you should not attend class.
  • If you are experiencing any symptoms of illness, please take a COVID test before attending and (if negative) wear a mask at all times in class.

As much as possible, I will make course materials available online to help mitigate the effects of absences.

Well-being and Accommodations

If you find that you are struggling due to factors that go beyond academic challenges, the Student Affairs office and Counseling Center have a robust set of options to help with your well-being.

If you require accommodations due to a documented disability, please contact Accessibility Services.

Academic Honesty

All students are expected to uphold the Amherst College Honor Code, in particular the Statement of Intellectual Responsibility:

Every person’s education is the product of their intellectual effort and participation in a process of critical exchange. Amherst College cannot educate those who are unwilling to submit their own work and ideas to critical assessment. Nor can it tolerate those who interfere with the participation of others in the critical process. Therefore, the College considers it a violation of the requirements of intellectual responsibility to submit work that is not one’s own or otherwise to subvert the conditions under which academic work is performed by oneself or by others.

Cases in which intellectual responsibility is violated (such as cheating) will result in loss of credit for an assignment and/or a failing grade in the course. Additionally, all suspected cases of academic dishonesty will be reported to the college, which may result in further disciplinary action by the college.

In particular, you should not:

  • share your code for assignments with other students in the class or ask others to share their code with you;
  • discuss material appearing on a quiz before you or others have submitted the quiz;
  • submit code written by someone else or derivative of someone else’s code without crediting the original author/source.

If you would like to use code that you did not write, be sure to attribute the source of the code in the comments of your code. Attribution is required even if you modify the original code.

UA. Your letter grade for the course is unlikely to have any long-term impact on your life. However, mastery of the skills and concepts covered in this course will be invaluable in almost any technical field you might pursue. Thus, I believe it is never in your interest to cheat in this (or really any) course. The long-term benefits of a good grade in this class are negligible, while the cost of not making a good-faith effort to master the material is potentially huge (independent of the ramifications of getting caught cheating). The course is designed to be challenging, but if you find yourself struggling to keep up, please reach out to the instructor.