### Course Meeting Times

Lectures: 2 sessions / week, 1.5 hours / session

### Overview

Here is a brief list of topics that will be covered in the course:

- Languages and compilers to exploit multithreaded parallelism.
- Implicit parallel programming using functional languages and their extensions.
- Higher-order functions, non-strictness, and polymorphism.
- Explicit parallel programming and nondeterminism.
- The lambda calculus and its variants.
- Term rewriting and operational semantics.
- Compiling multithreaded code for symmetric multiprocessors and clusters.
- Static analysis and compiler optimizations.

### Grading

There are three items that contribute to the final grade: problem sets, a midterm examination, and a course project. Each of them will be counted in according to the following table:

Problem Sets 50%

Midterm Exam 25%

Course Project 25%

### Homework

Your grade will be based entirely on homework assignments. We expect to hand out 4 problem sets, and you’ll have 1.5 to 2 weeks to complete each one. Homework problems will be graded by students. Each student in the class will be responsible for grading two problems of a problem set during the term (extra problems will be graded by the TAs). The grader for a particular problem will automatically receive maximum credit for that problem. Graders for a problem set will be selected shortly before that problem set is due. If you wish to grade a particular problem set problem, send email to the TA’s a week in advance of the due date. The grader for a problem will be chosen at random from among the volunteers. If no one volunteers for a particular problem, a student who hasn’t graded yet will be randomly chosen. As a grader, you are responsible for setting up a meeting with the TA’s within a day or two after the problem set due date. You’ll go over the problem with them in detail and receive the stack of student solutions. Then, one week after the problem set is due you will be responsible for returning the graded problem sets to the TAs along with a solution and a grade tabulation. The TA’s will explain this process in more detail when you meet with them. To facilitate the grading process, we ask that each numbered homework problem be turned in as a separate packet. Most problems will have several lettered parts. Each part will receive a check (correct and satisfactory), a check plus (outstanding), a check minus (unsatisfactory), or a zero (not turned in or indecipherable).

### Collaboration and Academic Honesty Policy

For problem sets, students are encouraged to collaborate in groups of up to 3 people. A group needs to hand in only one copy of the solution to a problem set. Groups need not remain the same throughout the course. We only need to know the names of the people who worked together on a particular problem set submission. Students in different groups are not allowed to collaborate on a problem set. Furthermore, it is explicitly forbidden to refer to previous years’ problem sets and solutions (course bibles).

### Course Reading Materials

Nikhil, Rishiyur S., and Arvind. *Implicit Parallel Programming in pH*. 1st ed. Boston, MA: Morgan-Kaufmann, 2001. ISBN: 1558606440.

### Facilities

Programming assignments for the course will be implemented in two programming languages: pH (parallel Haskell) and Hugs.