Catalog Description
The goal of this course is to provide a deep understanding of the
fundamental principles and engineering tradeoffs involved in designing high
performance computing platforms, from parallel computers (aka
``multiprocessors'') to Beowulf clusters, as well as the programming
techniques to effectively utilize these machines. Parallel machines are
already ubiquitous from desktops to supercomputers, and the expectation is
that they will become even more commonplace in the future. However, very few
people exploit the potential processing power of these machines because they
do not understand how to write efficient parallel programs. Because one
cannot design a good parallel program without understanding how parallel
machines are built and vice-versa, this course will cover both parallel
hardware and software design, as well as the impact that they have on each
other.
Course topics include naming shared data, synchronizing threads, and the
latency and bandwidth associated with communication. Case studies on
shared-memory, message-passing, data-parallel and dataflow machines will be
used to illustrate these techniques and tradeoffs. Programming assignments
will be performed on one or more commercial multiprocessors, and there will
be a significant course project.
This is a relatively unique course since this material is rarely offered
to undergraduates. Because parallel processing has become such an important
and mainstream technology, the time has come to integrate this material into
the undergraduate systems curriculum.