Computer Science 338
Parallel Processing

Williams College
Spring 2006


Instructor: Jim Teresco, TCL 304, 597-4251
Electronic mail: domain:, username: terescoj
Class Web:
Tutorial Meetings: Tuesdays and Wednesdays, as scheduled
Group Meeting: Thursdays 8:30-9:45 (not every week)
Office Hours: W 10:30-11:30, F 1:30-2:30, by appointment (subject to change)


Everything on this syllabus is subject to change. Changes will be announced by e-mail and updated in the online version of the syllabus.

Course Objectives

As processor speeds approach physical limits, we will no longer be able to count on faster and faster processors being released on a regular basis. Performance increases will need to come from larger, parallel computer systems. Parallelism complicates everything from computer hardware design to operating systems and compilers to application programming, yet it will become pervasive in the not-too-distant future. This course examines methods, techniques, and languages for parallel programming, libraries and extensions to sequential languages to support parallel programming, parallel computing environments, performance analysis, efficiency and complexity of parallel algorithms, and applications of parallel computation.



The main text is Parallel Programming in C with MPI and OpenMP, by Michael J. Quinn (McGraw-Hill, 2004, ISBN 0-07-282256-2). There will be readings from this book and from current and historically significant literature. You may also wish to dig out your copy of The C Programming Language, Second Edition, by Kernighan and Ritchie (Prentice Hall, 1988), as you will be programming in C. A reference text, Gropp, Lusk, and Skjellum's Using MPI, Portable Parallel Programming with the Message-Passing Interface, second edition, (MIT Press, 1999, ISBN 0-262-57134-X) will be available in the lab and from Schow as an eBook. Search in FRANCIS for more information.

Tutorial Format

This course is taught in the Williams Tutorial format. Students meet weekly with the instructor in pairs. Each week's assignment will consist of some combination of readings from the texts, readings from research literature, critiques of the readings, programming assignments and written problems. Attendance is required at your scheduled tutorial meetings. Please be prompt. Both tutorial partners must have done the readings and assignments for the meetings to be successful. In addition to the scheduled tutorial meetings, there will be some full class meetings when there is a topic that would benefit from a traditional lecture or a group lab meeting.


Evaluation will be based on tutorial assignments (written work, programming, participation), the term project, and a final exam. A second exam may be added around spring break.

Breakdown: Scale:
Tutorial Assignments 60% A+ >= 99% A >= 93% A- >= 90%
Final Exam 15% B+ >= 87% B >= 83% B- >= 80%
Final Project 25% C+ >= 77% C >= 73% C- >= 70%
D+ >= 68% D >= 66% D- >= 65%
E < 65%

Tutorial assignments will be made weekly and each will include assigned readings and a written and/or a programming component. The number of points available will vary with the complexity of the assignment. Programming assignments will typically be designated as "practice programs," "laboratory programs," or "team programs." See the honor code guidelines regarding each type of programming assignment. You may develop your programs anywhere (Computers in the lab, your own PC, etc.) but grading will be done using the Computer Science Lab's clusters unless otherwise specified. It is your responsibility to ensure that your program works on the grading platform. Programming projects will be graded on design, documentation, style, correctness, and efficiency.

Unless otherwise specified, late work may be turned in with a penalty computed as 1.08h%, where h is the number of hours late. Extensions will only be granted in serious situations and must be arranged through the Dean's office. You can find a C program that prints out a table of the late penalties here. Work turned in after solutions have been made available cannot receive credit. All assignments and projects are to be submitted via the turnin utility unless otherwise specified. Please submit plain text where appropriate and PDF otherwise. Please avoid other formats such as Word documents. If in doubt about a file format, please check with me first. Keep a copy of all submissions for yourself.

Questions about the grading of assignments or exams should be asked as soon as possible. No adjustments will be made more than one week after the graded work is returned.

Details of the final exam will be made available later in the semester.

Grades for individual assignments and exams are not scaled. Any scaling deemed appropriate will take place at the end of the semester by adjusting the above thresholds. Thresholds may be adjusted downward (thereby raising grades) but will never be adjusted upward.

Honor Code

The Honor Code as it applies to non-programming assignments is outlined in the Student Handbook.

For programming assignments in Computer Science courses, the honor code is interpreted in very specific ways. When a program is assigned, your instructor will identify it as a "practice," "test," "laboratory," or "team" program. The Honor Code applies differently to each with respect to collaboration or assistance from anyone other than the TAs or instructors:

Practice Programs. These are provided to help you gain an understanding of a topic, and are not graded. Guideline: Help on these programs is unrestricted.

Test Programs. Any assignment designated as a test program is to be treated exactly as a take-home, open-book test. You are allowed to read your textbook, class notes, and any other source approved by your instructor. You may not consult anyone other than your instructor. The instructor encourages the asking of questions, but reserves the right not to answer, just as you would expect during an exam. Guideline: Any work that is not your own is considered a violation of the honor code.

Laboratory Programs. Laboratory programs are expected to be the work of the individual student, designed and coded by him or her alone. Help locating errors is allowed, but a student may only receive help in correcting errors of syntax; help in correcting errors of logic is strictly forbidden. Guideline: Assistance from anyone other than the TAs or instructors in the design or coding of program logic will be considered a violation of the honor code.

Team Programs. Team programs are laboratory or test programs to be worked on in teams of two or more students. You are allowed to discuss team programs with your partners, but work with others is otherwise restricted by the appropriate rules above. Guideline: Any work that is not the work of your team is considered a violation of the honor code.

If you do not understand how the honor code applies to a particular assignment, consult your instructor.

Students should be aware of the Computer Ethics outlined in the Student Handbook. Violations (including uninvited access to private information and malicious tampering or theft of computer equipment or software) are subject to disciplinary action.

Guideline: To protect your work dispose of printouts and diskettes carefully, and avoid leaving your programs on hard disks in labs and other public storage areas.

The Department of Computer Science takes the Honor Code seriously. Violations are easy to identify and will be dealt with promptly.