This is an archived course. A more recent version may be available at ocw.mit.edu.

Syllabus

This course makes use of Athena, MIT's UNIX-based computing environment. OCW does not provide access to this environment.

This section includes a set of handouts that cover computational resources, grading, and how to get started.

Course Meeting Times

Lectures: 2 sessions / week, 1.5 hours / session

Course Information and Policies

Lectures

All material covered in the lectures will be fair game for projects and quizzes. We will post lecture slides on the course Web site; they may or may not contain all of the information presented in a particular lecture, and should not be considered a substitute for attendance.

Recitations

We will not have regularly-scheduled recitations. However, the teaching assistants will periodically hold primers (sometimes during regularly-scheduled lecture hours, and sometimes at other times) to cover practical material that will help you complete the projects.

Quizzes

There will be two one-hour quizzes, given during class time. The quizzes will be closed-book and closed-notes.

Roughly speaking, they will cover the first and second halves of the course material. All material covered by the lectures, projects, or prerequisite courses, as well as any other material indicated by course staff, is fair game for the quizzes.

There will not be a final exam.

Late and Missing Work

Since this is a fast-moving class, you will most likely find it very dificult to play "catch-up" if you should fall behind. For this reason, among others, we will generally not accept late projects. You should submit whatever you have in advance of the deadline and we will award partial credit as appropriate.

If you are in an unusual situation which you believe may constitute an extenuating circumstance, please get in contact with us in advance. We will require a letter from your medical professional or a dean of student afairs.

Grading

Each assignment will describe how the materials you submit will be evaluated. The scores you receive on each assignment will be combined to produce your final grade after being weighted as described below.

ACTIVITIES PERCENTAGES
Project 1 4%
Project 2 10%
Project 3 10%
Project 4 12%
Project 5 4%
Project 6 25%
Quiz 1 15%
Quiz 2 15%
Participation 5%

In addition, if you receive no substantial credit for the final project or for any two other assignments, you will receive a failing grade.

Handouts

Computational resources, project structure and grading (PDF)

Getting started (PDF)

Using PNQ (PDF)

Projects

The bulk of your out-of-class time will be spent completing six projects of increasing scope and complexity. The general structure of each assignment is described below.

Projects 1

Project 1 will be completed individually. It will allow you to explore how algorithmic design impacts performance. You will analyze four small programs and then make fundamental changes to them with the goal of increasing their performance. You will need to pay attention to both the time and space complexity of the programs you write, and examine time-space trade-offs.

Projects 2

Project 2 will be completed individually. You will learn how to profile an application to determine where it is spending most of its time and why. You will take advantage of hardware performance counters and several tools including VTune (a powerful profiler) and Pin (a dynamic instrumentation tool) to collect and analyze performance data.

Projects 3

Project 3 will be completed in pairs. This project will require you to examine the complex real-word problem of high-performance memory management. You will implement a library which provides the malloc, free, and realloc functions (that is, the C memory management API) as efficiently as possible for a number of different plausible workloads.

Projects 4

Project 4 will be completed in pairs. You will begin by analyzing optimizing a single-threaded physical simulation. Then, you will be introduced to Cilk, a language, compiler, library, and toolchain for devel­oping multithreaded applications, and will parallelize your project. This project will expose you to many of the issues associated with correctness and performance in a multithreaded application.

Projects 5

Project 5 will be completed individually. This project will be a take-home written assignment that will evaluate your knowledge of the theoretical material that the course will have covered. You will have a chance to demonstrate your knowledge of some of the analytical techniques and fundamental material that you will have learned.

Projects 6

Project 6 will be completed in small groups of two or three students. You will work to optimize a raytracer which renders scenes that include reflection, refraction, and interaction with solid objects and with water, as well as three distinct types of illumination (direct, caustic, and global). Unlike in previous projects, we will provide relatively little direction; you will have to use everything you have learned during the course to identify performance issues and eliminate them. There will be no resubmission for this final project—the fastest submission will win!

Collaborative Work

The Departmental Guidelines Relating to Academic Honesty require that we inform you of our expecta­tions regarding permissible academic conduct. It is your responsibility to satisfy both the letter and the spirit of these rules. If any part of this policy is unclear, or if you have any questions or concerns, please ask a member of the course staff for clarification.

If you violate this policy, you will be referred to a Committee on Academic Discipline and may receive a failing grade in the course (and face possible expulsion from MIT). We take academic dishonesty extremely seriously, so please don't put us in a position where we have to deal with it.

We will use technological and other means to detect cheating. It is often dificult to determine who the original author of plagiarized material is, and both parties (the author and the recipient) are guilty of academic dishonesty.

You may not share ideas, algorithms, approaches to solutions, or answers to written questions with anyone who is not a member of your group. When you are working alone, this means you may not interact in these ways with anyone else, whether or not they are in the class.

When working in a group, you may (of course) share ideas, code, and anything else that may be appropriate within the group, but be sure that you are making an equal contribution to the group. We ask you to briefly describe the contributions of each group member in the written material you submit with each project. If you have not made a fair contribution to that work, putting your name on your group's work is considered academically dishonest.

You may not permit anyone besides the staff and the members of your group to view your source code, your compiled binaries, or your written documentation; you may not view anyone else's solutions or materials. You may not refer to external materials which solve the problem at hand or a similar problem. You may not copy or transcribe a solution from any source. You may not use any libraries not explicitly approved by the course staff.

You may use general conceptual material, like that you might obtain from a textbook, regardless of its source. For instance, Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein is an excellent resource for looking up algorithms. If you do use any material from an external source, please briefly but clearly cite it in your documentation.

In short: please make sure that you are turning in your own work!