NOTE: the COMP web site for Spring 2011 has moved here

COMP 322: Principles of Parallel Programming (Fall 2009)


  1. Tuesdays & Thursdays, 10:50am - 12:05pm, Hertzstein Hall 119

Instructor: Vivek Sarkar            Assistant: Bob Garcia, DH 3137, x4476,

Teaching Assistant: Sanjay Chatterjee,

Course Summary:

Parallel computing has historically played a vital role in addressing the performance demands of high-end engineering and scientific applications. However, it has now moved to center stage in light of current hardware trends and device power efficiency limits. All computer systems --- embedded, game consoles, laptop, desktop, high-end supercomputers, and large-scale data center clusters --- are being built using chips with an increasing number of processor cores, with little or no increase in clock speed per core. Unlike previous generations of hardware evolution, this shift will impact all areas of Computer Science and all segments of the IT industry. In the future, all software will be parallel by default, and all computer science professionals will need to be trained in parallel software.

With these trends in mind, we have created a new introductory course at Rice on the principles of parallel programming.  The goal of COMP 322 is to introduce you to the foundations of parallel programming and parallel algorithms, using a pedagogical approach that exposes you to the intellectual challenges in parallel software without enmeshing you in low-level details of different parallel systems.  To that end, the main pre-requisite course requirement is COMP 314 --- this course should be accessible to anyone familiar with the foundations of sequential algorithms and data structures, and with basic Java or C programming.  The pedagogical approach will introduce you to five fundamental primitives of parallel programming:

  1. 1. Task creation and termination

  2. 2. Mutual exclusion and isolation

  3. 3. Collective and point-to-point synchronization

  4. 4. Task and data distribution

  5. 5. Data parallelism

We will study how these primitives can be used to create parallel algorithms, including parallel versions of algorithms that you’ve studied in COMP 314.  The primitives will be made available to you in a simple extension to the Java language called Habanero-Java (HJ), developed in the Habanero Multicore Software Research project at Rice University.  The use of Java is for convenience and will be confined to a subset of the language that should also be accessible to C programmers --- no advanced Java features will be used.

An abstract performance model for HJ programs will be available to aid you in complexity analysis of parallel programs before you embark on performance evaluations on real parallel machines.  The foundations gained in this course will prepare you for advanced courses on Parallel Computing (COMP 422, COMP 522), and also ease your transition to other multicore programming models such as Java Concurrency, .Net Task Parallel Library & PLINQ, Intel Threading Building Blocks, Cilk, and OpenMP, as well as programming models for GPUs such as CUDA and OpenCL and for large-scale clusters such as Hadoop and Google's MapReduce.

The aim of the course is for you to gain both theoretical and practical knowledge of the principles of parallel programming.  Accordingly, the weightage for course work will be equally balanced between programming projects and written assignments & exams.  For further information, please contact the instructor, Vivek Sarkar.