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