Over the last decade, processor vendors have shifted their strategy for improving microprocessor performance to delivering multiple cores per chip instead of continuing to pursue dramatic increases in clock frequency and single thread performance. This change represents something of a cataclysmic shift for software. In the past, application programmers painlessly rode the wave of higher clock frequencies and architectural enhancements to faster performance. With multicore processors, improvements in application performance depend upon making effective use of increasing levels of thread-level parallelism. As a result, parallel programming has suddenly become relevant for all computer systems.
The goal of the course is to study multicore processor architectures, the implications of hardware designs, software challenges, and emerging technologies relevant to hardware and software for multicore systems. Topics will include multicore microprocessors, memory hierarchy (cache organization alternatives), multithreaded programming models, scheduling (including work stealing), memory models (which specify program behavior), synchronization (including wait-free synchronization), transactional memory (hardware and software), concurrent data structures, debugging (including race detection), and performance analysis.
This course will focus on reading, analyzing, and discussing research papers (many of them award winning) related to hardware and software issues for multicore systems.
|27 August 2013||Updated|
|12 September 2013||Updated readings to resources|