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. 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. Do you have your own class or module to add to our list? Please let us know.
Click on a link below to jump to that section:
MIT 6.106
At MIT, Performance Engineering of Software Systems is an upper-division undergraduate course with prerequisitess 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
- Introduction & Matrix Multiplication (PDF, video)
- Bentley Rules for Optimizing Work (PDF, video)
- Bit Hacks (PDF, video)
- Assembly Language and Computer Architecture (PDF, video)
- C to Assembly (PDF, video)
- Multicore Programming (PDF, video)
- Races and Parallelism (PDF, video)
- Analysis of Multithreaded Algorithms (PDF, video)
- What Compilers Can and Cannot Do (PDF, video)
- Measurement and Timing (PDF, video)
- Storage Allocation (PDF, video)
- Parallel Storage Allocation (PDF, video)
- The Cilk Runtime System (PDF, video)
- Caching and Cache-Efficient Algorithms (PDF, video)
- Cache-Oblivious Algorithms (PDF, video)
- Nondeterministic Parallel Programming (PDF, video)
- Synchronization Without Locks (PDF, video)
- Domain Specific Languages and Autotuning (PDF, video)
- Leiserchess Codewalk (PDF, video)
- Speculative Parallelism & Leiserchess (PDF, video)
- Tuning a TSP Algorithm (PDF, video)
- Graph Optimization (PDF, video)
- 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
UC Davis EEC 289Q
John Owens adapted MIT 6.106 to create Performance Engineering of Software Systems at UC Davis.
Lectures
- Intro and Matrix Multiplication (PDF)
- Bentley Rules for Optimizing Work (PDF)
- Bit Hacks (PDF)
- Computer Architecture (PDF)
- C to Assembly (PDF)
- What Compilers Can and Cannot Do (PDF)
- Multicore Programming (PDF)
- Races and Parallelism (PDF)
- Analysis of Parallel Algorithms I (PDF)
- Analysis of Parallel Algorithms II (PDF)
- Measurement and Timing (PDF)
- Cheetah -- Cilk Runtime (PDF)
- Storage Allocation (PDF)
- Parallel Storage Allocation (PDF)
- Cache-Efficient Algorithms (PDF)
- Cache-Oblivious Algorithms (PDF)
- Nondeterministic Parallel Programming (PDF)
- Synchronization without Locks (PDF)
- Potpourri (PDF)
- Speculative Parallelism (PDF)
Modern algorithms workshop: parallel algorithms
Originally created in 2018 as a single full-day class, this workshop includes an introduction and 8 separate modules listed below.
- Introduction (PDF)
- Cilk model (PDF)
- Detecting nondeterminism (PDF)
- What Is parallelism? (PDF)
- Scheduling theory primer (PDF)
- Analysis of parallel loops (PDF)
- Case study: matrix multiplication (PDF)
- Case study: Jaccard similarity (PDF)
- Post-Moore software (PDF)
Join the OpenCilk community for access to editable slide decks.