CISC 879 - Advanced Parallel Programming

Professor John Cavazos
Class Time TR, 12:30pm-1:45pm
Room Number Memorial Hall 126
Office Hours by appointment
Course Number CISC 879
For two decades, software developers enjoyed an increase in application performance due to a doubling of transistors in processers about every two years, in accordance with Moore's Law. Much of this performance gain resulted from increasing clock speeds. However, due to temperature concerns, this is no longer possible. The industry now agree that the future of architecture designs lies in multicores, i.e., processors with simpler cores running at lower frequencies. As a consequence, all computer systems today, from embedded devices to high-end servers, are being built with multicore processors. Thus software developers can no longer sit idly by ("the La-Z Boy Era") and wait for application performance to improve. In fact, application performance is likely to degrade given future generations of multicores with ever more simple cores.

Although researchers in industry and academia are exploring many different multicore hardware design choices, most agree that software for execution on multicore processors is the major unsolved problem. Unlike earlier generations of hardware evolution, this shift will have a major impact on how software is designed and developed. Developers will have to learn how to properly design their applications to utilize multicore parallelism.

The first part of the course will consist of discussions about current multicore architecutures (specifically, GPUs) and parallel programming models (specifically, OpenCL with a lecture or two on CUDA and HMPP). The second part of the course will involve discussing several research papers (chosen by students) pertaining to multicores. Each student will be asked to present one paper to the class. The third and last part of the course will consist of presentations by students of programming projects. Students will have a variety of multicore architectures available for their class projects, including several systems accelerated with GPUs.

Lecture   Slides   Papers / Resources / Notes 
2/5 The Multicore Revolution  Slides (PDF)
2/7 A General Discussion on Parallelism  Slides (PDF)


Class Resources:

Class Syllabus
Instructions to Using the cuda.acad system


Most of your grade will come from two projects which will total 70% of your grade. Both projects are mandatory. Each student is encouraged to form team. I would like to have groups of 2 to 3 developers. Plan on checkpointing your project with the instructor (showing your progress) at various stages during your project. You must checkpoint at least once for each of the projects. These checkpoints will be part of your grade. You are not required to stay with the same group for both projects. Check the syllabus for more details.

Student Presentation Information

Your presentation should be on a paper pertaining to the use of GPUs used for general purpose computation (also known as GPGPU), although I will accept presentations on papers related to other cutting parallel architectures and/or programming environments.

Note: You should send me an email with the title of the paper you will present at least two weeks before you present so that no two people present the same paper!

Template for Talks

You can find GPGPU papers at the following locations.

GPGPU website
GPGPU workshop
Another GPGPU website (Look under "Features Stories and Papers")
ACM Digital Library (Search for GPGPU)
Google Scholar Search for GPGPU

This course material is Copyright (C) 2008 by John Cavazos and may not be used without prior written permission.