From smart phones, to multi-core CPUs and GPUs, to the world's largest supercomputers and web sites, parallel processing is ubiquitous in modern computing. The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems as well as to teach parallel programming techniques necessary to effectively utilize these machines. Because writing good parallel programs requires an understanding of key machine performance characteristics, this course will cover both parallel hardware and software design.
15-213/513 (Intro to Computer Systems) is a strict prerequisite for this course. We will build directly upon the material presented in 15-213, including memory hierarchies, memory management, basic networking, etc. While 18-447 (Intro to Computer Architecture) would be helpful for understanding the material in this course, it is not a prerequisite. Students are expected to be strong C/C++ programmers as there will be exposure to a variety of "C-like" parallel programming languages in this course. Previous experience with operating systems (15-410), distributed systems (15-440), or compilers (15-411) may prove to be very helpful.
There is no required textbook for 15-418/618. However, the following two textbooks will be put on reserve in the library for your use.
We will be using Piazza for general class announcements. The 15-418/618 Piazza page is located here.
Programming assignments. Students will complete four programming assignments. Assignment 1 will be performed individually. The remaining three assignments may be performed in groups of at most two. Although it is not necessary to have a partner in 15-418/618, it is highly recommended.
Take home quizzes. Students will complete take-home quizzes assigned every three weeks (four in total). Quizzes will be released on Wed night and be due the next Friday at 10am. These quizzes must be completed individually without discussion with other students, but will be graded on a participation basis only.
Making per-lecture comments. Each student must individually contribute one interesting comment per lecture using the course web site. This is checked weekly
Final project. Over the last six weeks of the course students will propose and complete a self-selected final project. The final project must be performed in groups of two. Each team will present the project orally during the 15-418/618 Parallelism Competition and produce a detailed write-up describing their work and results.
Exams. There will be two in-class exams.
- Programming Assignments (4): 40%
- Exams (2): 30%
- Final Project: 25%
- Participation (quizzes and on-line comments): 5%
Late hand-in policy. Each student is allotted a total of five late-day points for the semester. Late-day points are for use on programming assignments only. (They cannot be used for quizzes or final projects) Late-day points work as follows:
- A one-person team can extend a programming assignment deadline by one day using one point.
- A two-person team can extend a programming assignment deadline by one day using two points.
(e.g., one point from each student) - If a team does not have remaining late day points, late hand-ins will incur a 10% penalty per day
(up to three days per assignment). - No assignments will be accepted more than three days after the deadline.
Students in 15-418/618 are absolutely encouraged to talk to each other, to the TAs, to the instructors, or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each programming project team must write their own code and produce their own writeup. Consulting another student's or team's solution, or solutions from the internet, is prohibited. These and any other form of collaboration on assignments constitute cheating. If you have any question about whether some activity would constitute cheating, just be cautious and ask the instructors before proceeding!
You may not supply code, assignment writeups, or exams you complete during 15-418/618 to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who've taken the course previously). Make sure to make repositories private if you use public source control hosts like github.