Teach performance

The end of Moore's Law makes software performance engineering a priority for modern computer-science curricula. OpenCilk enables you to teach principles of multicore computing using a state-of-the-art task-parallel platform that is easy to learn.

List of classes and workshops

To help you develop your own course or module on performance engineering, we are compiling a list of relevant classes and workshops with materials that you can adapt. Do you have your own class or module to add to our list? Please let us know.

Each listing includes links to basic materials (e.g., lecture PDFs). Additional materials (e.g., editable slide decks, and solutions for homeworks and quizzes) are often also available, as detailed below, when you join the OpenCilk community.

Performance engineering of software systems

At MIT, Performance Engineering of Software Systems is an upper-division undergraduate course with prereqs of introductory computer architecture, algorithms, and programming courses. Other faculty have adapted this material as an introductory graduate course. The class uses the C language with OpenCilk task-parallel extensions. Materials from Fall 2018 are available on MIT Open CourseWare, which includes 23 lectures (listed below), 10 homeworks, 4 projects, 4 quizzes, and practice problems from selected recitations.

Lectures

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

MIT's course has a significant homework/project component. Enabling students to achieve high performance on project submissions is a significant goal of the course. MIT typically uses servers from commercial cloud providers (historically AWS) to accept project submissions and measure performance. Recent projects have included rotating an image, parallelization of a physical simulation, and memory management. The traditional MIT capstone project is a bot that plays one side of a 2-player game, where optimized bot performance is a necessity for a competitive submission.

Join the OpenCilk community for access to

  • PowerPoint source for slides
  • LaTeX source for homework and projects from a past course offering
  • Reference code for homeworks and projects
  • A library of past quiz and exam questions

Modern algorithms workshop: parallel algorithms

Originally created as a single full-day class, this workshop includes an introduction and 8 separate modules listed below.

  • Cilk model
  • Detecting nondeterminism
  • What Is parallelism?
  • Scheduling theory primer
  • Analysis of parallel loops
  • Case study: matrix multiplication
  • Case study: Jaccard similarity
  • Post-Moore software

Join the OpenCilk community for access to editable slide decks.