University of Western Ontario
Computer Science Department
Date: January 4, 2010
Current hardware improvements focus on increasing the number of computations that can be performed in parallel rather than on increasing clock speed alone. This change has brought multi-processor workstations to the desktop, expanding interest in parallel algorithms and software capable of exploiting these computing resources. At the same time, these new hardware acceleration technologies stress the need of a deeper understanding of performance issues in software design.
The aim of this course is to introduce you to the design and analysis of algorithms and software programs capable of taking advantage of these new computing resources. The following concepts will guide our quest for high performance: parallelism, scalability, granularity, locality, cache complexity, synchronization, scheduling and load balancing.
Out of the course, you are anticipated to have an in depth understanding of the following subjects:
A quarter part of the course will give an overview of other hot topics in high performance computing, including the following ones:
Week Jan. 4-10 | Introduction to software performance |
Week Jan. 11-17 | Introduction to multicore programming |
Week Jan. 18-24 | Multithreading parallelism and performance |
Week Jan. 25-31 | Analysis of multithreaded algorithms |
Week Feb. 1-7 | Practical issues in parallelism |
Case Study | |
Week Feb. 8-14 | Synchronizing without locks |
Week Feb. 22-28 | Cache memories |
Week Mar. 1-7 | Practical issues with locality |
Week Mar. 8-14 | Cache complexity |
Week Mar. 15-21 | Bit Hacks |
Week Mar. 22-28 | Space-time tradeoffs |
Week Mar. 29-4 | Experiences with coding high-performance numerical libraries |
Week Apr. 19-26 | Project presentations |