Performance Engineering of Software Systems

Electrical Engineering and Computer Science MIT CC BY-NC-SA 4.0 23 lectures

6.172 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. The course programming language is C.

Syllabus

  1. 1 Lecture 1: Introduction and Matrix Multiplication
  2. 2 Lecture 2: Bentley Rules for Optimizing Work
  3. 3 Lecture 3: Bit Hacks
  4. 4 Lecture 4: Assembly Language & Computer Architecture
  5. 5 Lecture 5: C to Assembly
  6. 6 Lecture 6: Multicore Programming
  7. 7 Lecture 7: Races and Parallelism
  8. 8 Lecture 8: Analysis of Multithreaded Algorithms
  9. 9 Lecture 9: What Compilers Can and Cannot Do
  10. 10 Lecture 10: Measurement and Timing
  11. 11 Lecture 11: Storage Allocation
  12. 12 Lecture 12: Parallel Storage Allocation
  13. 13 Lecture 13: The Cilk Runtime System
  14. 14 Lecture 14: Caching and Cache-Efficient Algorithms
  15. 15 Lecture 15: Cache-Oblivious Algorithms
  16. 16 Lecture 16: Nondeterministic Parallel Programming
  17. 17 Lecture 17: Synchronization Without Locks
  18. 18 Lecture 18: Domain Specific Languages and Autotuning
  19. 19 Lecture 19: Leiserchess Codewalk
  20. 20 Lecture 20: Speculative Parallelism & Leiserchess
  21. 21 Lecture 21: Tuning a TSP Algorithm
  22. 22 Lecture 22: Graph Optimization
  23. 23 Lecture 23: High Performance in Dynamic Languages

Course materials