University of Western Ontario
Computer Science Department
Date: January 3, 2011
Once upon a time, everything was slow on a computer. Today, hierarchical memories, multi-cores, instruction-level parallelism have change the game.
In this course we will present theoretical models that permit to achieve high-performance on today's computers. This will be illustrated by various applications.
Today's parallel hardware architectures (multicores, graphics processing units, etc.) and computer memory hierarchies (from processor registers to hard disks via successive cache memories) enforce revisiting many fundamental algorithms which were often designed with algebraic complexity as the main complexity measure and with sequential running time as the main performance counter.
Indeed, on modern computers minimizing the number of arithmetic operations is no longer the primary factor affecting performance. Effective utilization of the underlying architecture (increasing the amount of instruction level parallelism, better utilizing the memory hierarchy, etc.) can be much more important. Many examples exist where algorithms that use more arithmetic operations outperform algorithms with fewer arithmetic operations.
In this course, we will present different theoretical tools (cache complexity, multithreaded parallelism, space-time tradeoffs, code optimization for parallelism and locality, etc.) that are adapted for taking best advantage of parallel architectures and hierarchical memories.
We will discuss a large variety of applications (finite-difference methods, compression algorithms, artificial intelligence, metabolic networks, etc.) and compare the implementation techniques of a given algorithm on different hardware architectures (multicores, GPGPUs).
To have a more detailed idea about this course, please visit
the web site of a course I taught last year and from which
I will borrow part of the materials for this year's course:
CS 4435 and CS 9624 - High Performance Computing with a Focus on Hardware Acceleration Technologies.
Follow this link for various resources
(software tools and tutorials, hardware documentation,
conferences, other HPC course web sites, etc.)
regarding
this course and HPC in general.