6.106 | Spring 2025 | Undergraduate
Software Performance Engineering
Location, Time
Instructor: Xuhao Chen
Office Hours: Time, Location
Course Description
Modern computing platforms provide unprecedented amounts of raw computational power. But with great power comes great complexity, to the point that making useful computations exploit even a fraction of the computing platform’s potential becomes a substantial challenge. Indeed, obtaining good performance requires a comprehensive understanding of all layers of the underlying platform, deep insight into the computation at hand, and the ingenuity and creativity required to obtain an effective mapping of the computation onto the machine. The reward for mastering these sophisticated and challenging topics is the ability to make computations that can process large amounts of data orders of magnitude more quickly and efficiently and to obtain results that are unavailable with standard practice.
This is an 18-unit class that provides a hands-on, project-based introduction to building scalable and high-performance software systems. Topics include performance analysis, algorithmic techniques for high performance, instruction-level optimizations, caching optimizations, parallel programming, and building scalable systems.
Prerequisites
The course programming language is C. The prerequisites for this class are:
- MIT 6.1910 (previously 6.004) Computation Structures (i.e. Computer Organization)
- MIT 6.1210 (previously 6.006) Introduction to Algorithms
- MIT 6.1020 (previously 6.031) Software Construction
Grading
Each assignment will describe how you will be graded. The scores you receive on each assignment will be combined to produce your final grade after being weighted approximately.
Assignments | Percentages |
---|---|
Weekly Homeworks | 10% |
Quizzes | 30% |
Project 1 | 10% |
Project 2 | 12% |
Project 3 | 12% |
Project 4 | 24% |
Class Participation | 2% |
Textbook
Reading materials will be posted on the class website.
Computing Resources
Schedule and Slides (subject to change)
Week 01 | Intro and Matrix Multiplication [video] | HW1 assigned [HW1 Materials] |
Week 02 | Bentley’s Rules [video] Bit Hacks [video] | HW2 assigned [HW2 Materials] Project 1 Beta assigned [Project 1 Materials] |
Week 03 | Computer Architecture [video] C to Assembly [video] Vectorization | HW3 assigned [HW3 Materials] Project 1 Beta Writeup due Project 1 Final assigned |
Week 04 | Multicore Programming [video] Races and Parallelism [video] | HW4 assigned Project 1 deadline |
Week 05 | Parallel Algorithms I [video] Parallel Algorithms II | HW5 assigned Project 1 Final due Project 2 Beta assigned [Project 2 Materials] |
Week 06 | Measurement and Timing [video] | Project 2 Beta due Project 2 Final assigned |
Week 07 | Storage Allocation [video] | HW6 assigned [HW6 Materials] Quiz #1 Project 2 deadline |
Week 08 | Parallel Storage Allocation [video] | HW7 assigned Project 2 Final due Project 3 Beta assigned [Project 3 Materials] |
Week 09 | Cache-Efficient Algorithms [video] Cache-Oblivious Algorithms [video] | HW8 assigned Project 3 Beta due Project 3 Final assigned |
Week 10 | Nondeterministic Parallel Programming [video] Synchronization without Locks [video] | HW9 assigned [HW9 Materials] Project 3 deadline |
Week 11 | Speculative Parallelism [video] | Project 3 Final due Project 4 Beta 1 assigned [ Leiserchess Rules (PDF)] [Project 4 Materials] |
Week 12 | No lectures | Quiz #2 |
Week 13 | GPU Programming [video] | HW10 assigned Project 4 Beta 1 due Project 4 Beta 2 assigned |
Week 14 | What Compilers Can and Cannot Do [video] | Project 4 Beta 2 due Project 4 Final assigned Project 4 MITPOSSE deadline |
Week 15 | No lectures | Student Presentations due |
Week 16 | TBD | TBD |