!!better!! | 6.5080 Multicore Programming

In 2005, Intel canceled the development of its 4GHz Pentium 4 chip, marking the definitive end of Dennard scaling. Since then, transistor density has continued to increase according to Moore’s Law, but clock speeds have stagnated. The industry’s response has been the multicore processor: chips containing two, four, sixty-four, or more distinct processing units. However, adding cores does not automatically accelerate software. As computer architect Herb Sutter famously noted, “The free lunch is over.” Course 6.5080 confronts this crisis directly. It transitions the student from thinking like a sequential programmer—where each step follows logically from the last—to thinking like a concurrent systems architect, where multiple threads of execution interleave, contend for memory, and must cooperate without corruption.

Enter . This course is not merely about teaching students how to use threads; it is about teaching them how to stop fighting their own hardware. 6.5080 multicore programming

One of the primary pillars of the curriculum is the study of shared memory models and consistency. When multiple cores access the same memory location, the order of those operations matters. Modern processors often reorder instructions for efficiency, which can lead to counterintuitive results in a parallel program. Understanding memory consistency models, such as sequential consistency and relaxed consistency, is vital for writing code that behaves predictably across different hardware architectures. In 2005, Intel canceled the development of its

Using Intel Threading Building Blocks (TBB) and cilk_spawn / cilk_sync , students parallelize recursive algorithms like Quicksort and Merge Sort. They learn about work stealing: idle threads dynamically take tasks from busy peers, achieving near-linear speedup even for irregular workloads. In a multicore world

In a single-threaded world, if code fails, you can pause it, step through it, and find the error. In a multicore world, the moment you pause a thread to inspect it, you change the timing of the system. The bug often disappears simply because you looked at it.

Mastering Concurrency: The Principles and Practices of 6.5080 Multicore Programming