Syllabus


Introduction

Over the past few decades, we have seen a monumental explosion in the amount of computational power available to address a variety of problems important to the human race. This increase in computational power has been made possible by the creation of large-scale parallel and distributed computing systems. These systems come in many shapes and sizes, but there are many common themes. In this course, we will explore these themes and the various ways to develop software for such systems.

Spring 2022 Notes

This is a synchronous in-person course, but given the ongoing nature of the COVID-19 pandemic and the technology used in the course you are strongly encouraged to ensure you have the following hardware and software:

  • A reliable, high-speed internet connection capable of running Zoom sessions, streaming 720p video, and completing 1-hour Canvas assessments without dropping.
  • A webcam and microphone, and preferably earphones or earbuds to reduce audio feedback during Zoom sessions.
  • A web browser capable of using Canvas, viewing the course website, and reading the course textbook (see section above for details).
  • A device capable of scanning written work to a black and white PDF.
  • The Zoom meeting client.
  • The Slack chat client.

Course Plan

The material in this course will be presented using a combination of readings and lectures, and you will occasionally have your understanding tested using online Canvas quizzes. Some quizzes are reading quizzes and will be due before the class period in which the material will be discussed, while other quizzes are review quizzes and will be due afterward. You are responsible for watching the course website and Canvas for quizzes. For some topics, we will also complete an in-class, hands-on lab to help reinforce some aspect of the material.

Quizzes and labs are intented to be formative assessments, helping you engage with the material for more effective learning. Accordingly, they are a relatively small portion of your final grade. Two major exams (a single midterm and a final exam) will serve as the summative assessment of course material to verify that you have reached an acceptable level of mastery, and these will constitute a more significant portion of your final grade.

This is an advanced systems course, and thus software development will be a significant focus of the course. You will complete four regular programming projects as well as a research project of your choice, and your performance on these projects will constitute a significant portion of your final grade. Your project solutions will be graded for correctness, elegance, style, and documentation. The projects are intended to be summative, showing me whether you can apply course content to build an actual software product.

In addition, all students in this course will conduct a code review for the four regular projects, mirroring standard software development processes in industry. You will be given someone else’s submission (possibly two of them) and asked to read it and offer constructive criticism. You will be graded on the quality of your code review.

If you wish, you may work with another student in a two-person team for the four regular course projects. If you wish to do this, you must notify me at least a week before the due date so that I can set up submission groups on Canvas. However, you must submit individual peer reviews; you may not collaborate on those components. Teams for the research project may be larger than two people depending on the scope of the project; if you wish to work in a larger team, please contact me as early as possible to discuss appropriate group sizes and project scopes.

In addition to the four regular projects, you will also complete a research project, where you will gain a greater understanding of academic research and gain experience working on open-ended problems while reinforcing general course concepts. This course is particularly well-suited to doing a research project because so many of the topics we cover are related to open research questions. Unlike regular project groups, research project groups may contain up to four people, although due to prior experience I recommend keeping the project sizes to at most three.

Course Topics

Here is a rough outline of topics that will be covered in this course:

CS 470 topics

This outline is subject to change. Here is a link to the current outline (in mind map format): cs470_topics.mm

You can read and edit the mind map using the open-source FreeMind software package or use the interactive outline.

Objectives and Expectations

This course is an introduction to parallel and distributed systems. We will explore shared memory, cluster, grid, peer-to-peer, and cloud computing models along with parallel software patterns, distributed file systems and performance considerations. The course work includes a significant programming component.

By the end of the course, you should be able to do the following:

  • Describe hardware architectures relevant to parallel and distributed systems
  • Describe relevant societal and scientific problems that can be addressed using parallel and distributed computing
  • Compare and apply parallel decomposition strategies including task and data parallelism
  • Justify the role of middleware for distributed and parallel computation
  • Build software for shared-memory multiprocessing, and for distributed computation using message-passing
  • Describe tradeoffs between wide-scale parallel paradigms, including cluster, grid, and peer-to-peer computing
  • Compare and contrast local, networked, and distributed file systems
  • Explain performance metrics and how they relate to our understanding of a program's behavior

This course requires a lot of prerequisite systems knowledge, most of which you should have seen in CS 261 or CS 361. Here is a list of some other things you should be able to do reasonably quickly by the time you take CS 470:

  • Login to a remote Linux server via SSH in a terminal
  • Copy files and folders on the command line (cp)
  • Edit files from the command line (e.g., nano or vim)
  • Download files using the command line (e.g., curl or wget)
  • Implement a singly-linked list
  • Use a debugger to find segfault sources
  • Use a debugger or logs to trace execution
  • Use Valgrind to locate memory problems

If you are unsure whether you could comfortably do one or more of these things, I encourage you to practice them ahead of the first day of class.

Course Textbook

Parallel Programming, 1st Edition
Peter Pacheco

This is a very practical handbook for software development on parallel and distributed systems. We will use this book as a reference as we learn how these systems work and how to best exploit the various kinds of parallelism they provide. The book should also serve as a good reference should you ever encounter the need to write such software later in your career. We will supplement this textbook with material from other sources as appropriate throughout the semester.

The textbook is available online through JMU's Elsevier ScienceDirect subscription: Table of Contents (access on campus or sign in via your institution)

Textbook Cover

Distributed Systems, 2nd Edition
Andrew Tanenbaum and Maarten Van Steen

This is a standard distributed systems textbook that covers a range of topics, some of which we will be covering in this course. This is NOT a required textbook, but I will be using it as a source for some of the lectures in the latter half of the course.

Textbook Cover

Grading Criteria

You are responsible for all material discussed in lecture and discussion section and posted on the class web page, including announcements, deadlines, policies, etc.

Your final course grade will be determined according to the following percentages:

Quizzes 10%
Labs 10%
Regular Projects 20%
Research Project 20%
Midterm Exam 20%
Final Exam 20%

Unless otherwise noted, grades will be assigned using a standard 90/80/70/60 grading scale with standard +/- cutoffs (0,3,7).

Final course letter grades may be curved at the end of the semester based on each student's overall performance for all coursework. Other factors that may influence a curve are your general performance trend over the semester (improving or degrading) and your general investment in the course (attendance and participation). These are aspects of the course for which I do not give formal grades, but they may factor into your final letter grade assignment.

If you believe I have made an error while grading your work or calculating your final score, please bring it to my attention after class or during office hours. If I determine that there has been a simple mistake, I will fix it immediately and no formal request is necessary.

If you believe an exam question or assignment has been graded unfairly, you must submit a verbal or written formal request for a regrade. Such requests must be submitted within one week of when the assignment in question is returned to you. Any coursework submitted for reconsideration may be regraded in its entirety, which could result in a lower score if warranted.

Completing the programming assignments is an essential part of the course. Therefore, I reserve the right to fail any student who does not make a good-faith attempt on all course projects, regardless of the student's performance or scores on the other coursework.

I will attempt to provide as much feedback as I can regarding your performance on the projects, and I will assign an overall project grade holistically according to the following grading scale:

Exceptional A
Good B
Satisfactory C
Deficient D
Unacceptable F

Some portion of project grades may be determined based on automated tests. You code will also be graded for elegance, style, and documentation according to software engineering principles. If you have any questions about these criteria, please inquire on Slack and I will provide clarification.

Your final grade for the research project is based on several submissions throughout the semester and will be graded according to the following percentages:

Preliminary Deliverables 10%
Proposal 10%
Mid-Project Deliverable 30%
Showcase Poster Project 10%
Final Deliverable 40%

Major research project grades (with the possible exception of the final deliverable) will be accompanied by written feedback about how the project could be improved for the next deliverable.

Instructor Contact Info


Slack

Please post generic questions to Slack, where other students may answer and/or benefit from my answers. If you have a non-generic question, please send me an email (my address is lam2mo at the standard domain). My office hours are posted in the semester-specific section at the top of this syllabus, as is information about scheduling a meeting outside office hours.

I do my best to respond to emails in a timely fashion. You may reasonably expect a response to an email inquiry within 24-48 hours during the week; feel free to re-send an email if you do not receive a response in that time frame. However, I do not guarantee responses over the weekend, and I do not guarantee any response at all to email inquiries sent during the last 24 hours before a project due date. This policy exists to encourage timely work on projects.

Course Policies

Important announcements will be made in class and/or on the class website (including Slack). Please make it a habit to check the web page and Slack daily. I usually make an effort to broadcast announcements when the schedule changes, but you alone are responsible for missed assignment due dates. Do not rely on the Canvas sidebar to keep track of course assignments for you; it is not always reliable.

Although every effort has been made to be complete and accurate, unforeseen circumstances arising during the semester could require the adjustment of any material given here. Consequently, given due notice to students, I reserve the right to change any information on this syllabus or in other course materials.

You are permitted to use course materials for your own personal use only. Course materials may not be distributed publicly or provided to others (excepting other students in the course), in any way or format unless explicitly allowed.

Attendance and Participation

Attendance is not mandatory, and I will not give grades purely based on attendance. I view my students' time as valuable, and my goal as a teacher is to make class attendance and participation well worth the time investment for you. I strongly encourage you to attend every class session and participate fully in order to derive the maximum benefit of this course. If you believe that there is something I could change about the way I am handling the course in order to improve its effectiveness for you, please let me know via email or office hours.

You should also be aware that I do occasionally give graded quizzes or graded group work assignments during class periods. In some cases, I will notify you in advance about these quizzes or assignments, but I do reserve the right to administer them unannounced at my discretion.

I strongly encourage you to check the main website and Slack regularly for important announcements (usually regarding programming projects). You may also use Slack to ask general questions of interest to the class as a whole (e.g., administrative issues or project clarification questions) as well as to offer each other general advice on class assignments. However, do not post any information that would violate the university academic integrity policy. If you are unsure about this, please email me for approval before you post.

Programming Projects

Projects must be submitted electronically following the instructions given in class and on the website. Projects may not be submitted by any other means (e.g., do not email your projects to me unless I request that). It is your responsibility to test your program and verify that it works properly before submitting it.

All projects are due at 23:59 (11:59pm) on the day indicated on the project assignment unless noted otherwise.

Projects may be submitted up to 72 hours late for a 10% penalty per 24-hour period. For example, a submission that would have earned 90 points in an on-time submission will earn 90 x 0.90 = 81 points if submitted up to 24 hours late, or 90 x 0.80 = 72 points if submitted up to 48 hours late. If you make multiple submissions, I will typically grade the latest submission. If you wish me to grade a different submission, you must indicate this before the 72-hour late period is over.

Regardless of the above policy, I reserve the right to refuse to grade any projects submitted after the beginning of the second class period following the project deadline, because I may discuss the solution in class.

Project extensions will not necessarily be granted due to server congestion, system problems, network problems, power outages, etc., so do not wait to submit a project until the night it is due. No consideration in grading will be made for errors made in transferring files or submitting the wrong version of your project. Having a working, non-submitted version will not count; only submitted code will be be counted. I strongly urge you to use version control software and/or keep redundant backups of your work to avoid data loss.

You will be responsible for developing your own techniques for testing your projects before submitting it. I will grade your projects based on test cases not provided to you in advance. Because grading may be done automatically, you must follow the project specification exactly.

Your code will be graded on a combination of correctness, completeness, documentation, and code style. If you have any questions as to what constitutes good documentation or code style, be sure to ask ahead of time or refer to any provided style guide.

Any "hard coding" in a project assignment will result in a score of zero for that project, and is considered a bad-faith effort. Hard coding refers to attempting to make a program appear as if it works correctly, when in fact it does not. One example of hard coding would be printing the desired output instead of computing it. If you have any questions as to what constitutes hard coding for a particular assignment, be sure to ask ahead of time.

Adding and Dropping the Course

Students are responsible for adding and dropping courses. Please consult the appropriate academic calendar for the exact deadlines. I will not give "WP" or "WF" grades to students requesting a drop after the deadline except in extraordinary circumstances.

Academic Honesty

You are expected to comply with the JMU Honor Code as stated in the Student Handbook and available from the Honor Council website on all assignments, projects, and exams.

Consulting with other students about problems and solutions is not necessarily a violation of the honor code, depending on the particular assignment. All final work turned in for an assignment must be your own unless it is a group project. In particular, you may not share any source or binary code on programming assignments unless the project specification explicitly allows it. If you are in doubt about whether something is an honor code violation, please contact me immediately.

In this course, we will be using a shared computing resource (a 12-node cluster). We will discuss proper use of this resource, but it is your responsibility to use this resource honestly and fairly. Any improper use of this resource (hacking, abuse, denial-of-service, etc.) will be considered a violation of section II.A.16 of the honor code as well as any applicable criminal code. If you are in doubt about whether something is an honor code violation with respect to this aspect of the course, please contact me immediately.

If I find evidence of a violation of the honor code, I will bring the matter to the attention of the involved individuals via email and request a face-to-face meeting. As per section IV of the honor code, first time student offenders may agree that a violation has occurred and accept an appropriate penalty by submitting an "Informal Resolution Agreement Form" to the honor council. If the student is not a first-time offender or if there is disagreement about the violation or penalty, the matter will be referred to the honor council under section V of the honor code.

Disability Accommodations

If you need an accommodation based on the impact of a disability, you must contact the Office of Disability Services if you have not previously done so. Disability Services will provide you with an Access Plan letter that will verify your need for services and make recommendations for accommodations to be used in the classroom. Once you have shown me this letter, we will sit down and review the course requirements, your disability characteristics, and your requested accommodations to develop an individualized plan appropriate for this course. I will not make any accommodations without the appropriate documentation, as I am not qualified to diagnose disabilities.

Excused Absences

Besides the policies in this syllabus, the University's policies apply during the semester. Various policies that may be relevant appear in the Undergraduate Catalog.

Excused absences will be granted at my discretion and only with appropriate documentation. Please contact me as soon as possible if you wish to request an excused absence.

Missing an exam for reasons such as illness, religious observance, participation in required university activities, or family or personal emergency (such as a serious automobile accident or the funeral of a close relative) all are circumstances that may qualify as an excused absence. However, you must provide documentation that the absence qualifies as excused. I will arrange a makeup exam or substitute assignment at my discretion.

The policies for excused absences do not apply to in-class activities (which cannot be made up) or project assignments. Projects will be assigned with sufficient time to be completed by students who have a reasonable understanding of the necessary material and begin promptly. In cases of extremely serious documented illness of lengthy duration or other protracted, severe emergency situations, I may consider extensions on project assignments depending upon the specific circumstances. Please contact me as early as possible if you believe you will need such an extension.

Inclement Weather

This class will operate in accord with JMU's official cancellation policy. Because it is an online class, we will generally NOT cancel due to inclement weather. Please contact me ASAP if you anticipate difficulty attending class or submitting an assignment because of inclement weather.