CS 348: Parallel & Distributed Computing

Course Overview

As multi-core machines become more prevalent, different programming paradigms have emerged for harnessing extra processors for better performance. This course explores parallel computation (programs that run on more than one core) as well as the related problem of distributed computation (programs that run on more than one machine). In particular, we will explore major paradigms for parallel programming, shared-memory multi-threading and message-passing, and the advantages and disadvantages of each. Other possible topics may include synchronization mechanisms, debugging concurrent programs, fork/join parallelism, the theory of parallelism and concurrency, parallel algorithms, cloud computing, Map/Reduce, transactional memory, and memory models.

Course Information

Instructor: Dave Musicant
Email: dmusicant
Office: CMC 326 (x4369)
Office hours: check my web site
Graders: Will Knospe (knospew2) and Alex Schneider (schneidera)
Textbook: No required textbook, but readings will be posted on Moodle.

Assignments

Most of the assignments will be programming projects of various sorts. Some of them will be reasonably large projects implementing a big idea, perhaps in multiple ways; other projects will be smaller efforts to explore a particular way of doing things. There will also be a smaller number of analysis/theory/algorithm-design sorts of assignments that aren't explicitly programming-oriented.

Some of the assignment will be paired assignments although you can work alone if you wish.

There will be three midterm exams, with no cumulative "final" exam. The third exam will take place during finals week, and so perhaps may be a little longer than the others because we have time to do it, but it will not be intended to test the entire course.

Grading

Your grade will be computed as follows:

Assignments: 65%
Exams: 35%

I'll weight the value of each assignment approximately by its size.

Individual vs team grades

For each assignment that you work on in a pair with another student, you'll receive a grade based on the quality of that joint submission. This grade will be used to form part of your overall homework average. Your overall homework score will form part of your course average, which will be used to determine a final grade.

That said, you also must do work of passing quality on your individual assignments and exams in order to pass the class.

Homework Policy

Each assignment will have a specific time for which it will be due, and your electronic submissions are timestamped. You have seven "late-days" (in other words, one week in total) that you can use at anytime during the term, with no explanation or request needed. If you are off-campus, if you are sick, etc., these are all exactly the sorts of situations for which these late-days apply. You automatically use up a late-day for every class day that passes when you turn in an assignment late. For example, if you turn in two assignments late, each 17 hours after the due time, that counts as two late-days. Likewise, if you submit a single assignment 30 hours after the due time, that also counts as two late-days. Assignments that are turned in late after your late-days are used up will not receive any credit.

Note that no work may be turned in past the end of exams without approval of the Dean of Students office, and so the above policy may not be used to work past the end of the term.

Computer Usage

We will be programming in Java, specifically version 8, which is the most recent LTS (Long Term Support) version. We will be grading assignments on the CS lab computers, so you should ensure that your submission works on those machines before turning it in. Parallel code has a nasty of habit of running with different characteristics on different hardware, especially if you have subtle multithreading sorts of bugs. Make sure you test your code on department computers before submitting.

Getting Help

If you need help with an assignment, you can consult with other students or come to me. You can also post questions to the Q&A forum on Moodle.

Collaboration, Plagiarism, and the Difference between the Two

There are two different kinds of working together: collaborating and plagiarism.

Collaborating

Collaborating is good. You are encouraged to collaborate on ideas and program design. Programming is often a social effort, and there is much you can learn by talking out the ideas in this class with each other. If a piece of your program utilizes someone else's idea, i.e., someone other than the program author(s), you must give that person credit in your credits.txt file. When in doubt, give credit.

Plagiarism

Plagiarism is bad. DON'T DO IT!

  • Any programs that you turn in should be your work of the author(s) only.
  • Even if the program author(s) share ideas with others, the program itself must be written by the author(s).
  • If a piece of your program utilizes someone else's idea, you must make sure to give that person credit in program comments.

The following are examples of plagiarism.

  • Taking someone else's program, changing the variables and comments around, putting your name at the top, and turning it in.
  • Finding a similar program on the internet, changing the variables and comments around, putting your name at the top, and turning it in.
  • Finding a similar program in a book, changing the variables and comments around, putting your name at the top, and turning it in.

I am compelled by Carleton policy to submit plagiarism cases that I find to the Dean of Students, who in turns brings the evidence before the Academic Standing Committee. The academic penalty for a finding of responsibility can range from a grade of zero in the specific assignment to an F in the course.