CS 348: Parallel & Distributed Computing
Table of Contents
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 the two 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, GPU programming, transactional memory, and memory models.
Course Information
Instructor: Dave Musicant
Email: dmusican
Office: CMC 326 (x4369)
Office hours: check my web site
Grader: Eric Ewing (ewinge
)
Textbook: No required textbook, but readings will be posted on Moodle.
Course Structure
There will be four programming projects, which will most likely be the following (although I may change things up, depending on how the course progresses):
Project 1: Analyzing US census data using fork/join parallelism
Project 2: Implementing a simple STM (software transactional memory)
Project 3: Multithreaded webserver
Project 4: Analyzing web advertisement logs using MapReduce
You are encouraged to work with a partner of your choosing, although you can work alone if you wish. If you are having trouble finding someone to work with, email me and I will be happy to try to match you up with another student.
There will also be a small number of written homeworks, including summaries of relevant research papers. These are to be completed individually.
There will be an in-class midterm exam, and a scheduled final exam during Exam Days.
Grading
Your grade will be computed as follows:
Programming projects: 60%
Written assignments: 5%
Midterm: 15%
Final exam: 20%
Individual vs team grades
For each assignment that you work on in a team with other students, 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. An assignment turned in late within one day of the due time will be docked 25%. A program turned in later than one day of the due date but within two days will be docked 50%. A programming assignment turned in any time after this until the last day of classes will be docked 75%. Non-programming assignments can not be turned in any later than two days following the due date since we may be discussing answers in class.
Computer Usage
We will be programming in Java, specifically version 8, which added the useful java.util.concurrent package to the standard library. 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.
For the MapReduce project, we will be using simulated clusters on the lab machines, and then using Amazon's Elastic MapReduce cluster for actually submitting jobs. We will talk more about using the cluster later.
Getting Help
If you need help with an assignment, you can consult with other students or come to me. I have also set up a forum on Piazza.com so that I can answer questions to common problems more efficiently.
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.