22C177 or 22M178 : High Performance
and Parallel Computing
Tuesdays & Thursdays: 12:30-1:15 LAB 301 MLH and
1:15-1:45 113 MLH.
http://www.cs.uiowa.edu/~oliveira/C177-F11/22c177-fall2011.html
The core of this class is parallel algorithms. With the widespread
adoption of multicore processors and the use of Graphics Processing
Units (GPUs) for mainstream computation, parallel programming
techniques can and should be used in research and also by the
general programmer using standard desktop and laptop computers.
We will study parallel algorithms for diverse problems in various types
architectures and platforms; algorithms include numerical integration
(trapezoidal rules), PDE solvers (Laplace equation), and matrix-matrix
multiplication for example. We will cover message
passing algorithms for distributed memory using MPI, shared memory, and
multicore algorithms using threads and OpenMP, and algorithms and
implementations for general programming on GPUs using either CUDA or
OpenCL. The implementations will be done during lectures
and also through programming assignments. Sequential issues such
as memory access, temporal and spatial locality, and floating point
arithmetic issues will be also be addressed. Half of the lectures will
be in the computer lab where we will introduce the implementation
approaches and develop programs using the new tools.
This course can be used as a Math course or Computer Science. There are
no prerequisites, previous programming experience with any language
(including Matlab) is fine. It is also good class if you are a student
wanting more programming experience but is not
ready to jump into an object oriented class such as 22C021 or 22C022. A
C programming tutorial will be available for students not familiar with
C yet and some Labs will address basic and advanced issues related to
the C language before
we
start programming in Parallel. Some books used as References:
* Using OpenMP, Chapman, Jost and van der Pas, MIT
Press (2008)
* Art of Concurrency, Clay Breshears (2009)
* CUDA by Example: An Introduction to
General-Purpose GPU Programming, Sanders & Kandrot (2010)
* Programming Massively Parallel Computers, Kirk
& Hwu, Morgan Kauffman (2010)
* Writing Scientific Software, Oliveira &
Stewart, Cambridge University Press (2006)
* Parallel Programming with MPI, Pacheco,
Morgan Kauffman (1996)
For more information please email: oliveira@cs.uiowa.edu