Syllabus

Course Meeting Times

Lectures: Three sessions / week, 2 hours / session

Recitations: Two sessions / week, 1 hour / session

Course Overview

The era of Moore's law induced performance gains of sequential programs is over. In the future, the primary method of increasing program performance will require the utilization of multicore parallelism. The processing platforms of the future will have hundreds or even thousands of processor cores that are tightly integrated for parallel processing. Unfortunately, very few programmers know how to program these multicore systems. This pain will be felt in all tiers of the market because of the increasing reliance on computing power for scientific discovery and day-to-day activities. There will be a deep impact on academic institutions as well because they have done little to train the programmers of the future with the right concepts and tools so that they can harness the computing power of multicores and massively parallel systems.

Some leading vendors are already offering parallel processors on a chip. Today, most general purpose processors in the market are multicores. The Cell processor from IBM, Sony, and Toshiba is a 9-core heterogeneous processor that powers the Sony PLAYSTATION®3 and also appears in various broadband markets. At their Developer Forum a few months ago, Intel announced an 80-core homogeneous processor slated for fabrication in just a few years. These new architectures offer the unique opportunity to have parallel systems on a chip available to the masses in gaming consoles, mobile devices, personal computers, and embedded platforms. The ubiquitous presence of parallelism will make it necessary to train a new breed of programmers so that parallel programming is as easy and tractable as the conventional sequential programming that millions of programmers are accustomed to today.

Course Highlights

The course serves as an introductory course in parallel programming. It offers a series of lectures on parallel programming concepts as well as a group project that provides hands-on experience with parallel programming. Students will have the unique opportunity to use the cutting-edge PLAYSTATION 3 development platform, as they learn how to design and implement exciting applications for multicore architectures. At the end of the course, students will have an understanding of:

  • Fundamental design philosophies that multicore architectures address.
  • Parallel programming philosophies and emerging best practices.

Course Description

The course briefly covers the history of the microprocessor evolution and discusses the reasons for the recent shift in architecture design toward multicores. Students will become familiar with the Cell processor that powers the PLAYSTATION 3 and how its design choices compare to other emerging architectures.

Students will also learn about the various programming models currently used for programming parallel architectures. The course combines lectures with hands-on labs so that students can experiment with the different models of computation and learn about the pros and cons of the different programming models. Students will also learn StreamIt, a new, simple, and natural to understand programming language for stream computing. The course will explore broader implications of the stream programming model to various kinds of traditional parallelization technology.

Students will participate in a course long project drawn from any of several exciting domains that include gaming engines, media applications, algorithms for molecular dynamics, and protein folding challenge problems. Students are expected to participate in small project teams. Course projects are evaluated based on their performance, complexity, and completeness. Students will compete for exciting prizes to be awarded to the best project as selected by a panel of judges.

Grading

Grades will be determined using the following weights:

ACTIVITIESPERCENTAGES
Mini-quizzes16%
Exercises and labs24%
Final group project60%


 

Target Student Population

The course is open to all students (undergraduates and graduates). Students who are interested in the course are strongly encouraged to discuss project ideas with the instructors before enlisting in the course. We have several projects that we can suggest and discuss with you, or we can discuss some of your own project ideas. We strongly encourage small teams of students per project. Teams of 4-5 students are likely to work best, but smaller teams are also plausible. We can help you assemble a team as necessary, although it is best if you know someone that will want to work on the same project with you. Each team will have dedicated access to a PLAYSTATION 3 console, along with programming and debugging tools, tutorials, and hands-on help.

Calendar

The calendar below provides information on the course's lecture (L) and recitation (R) sessions.

SES #TOPICSLECTURERS
Week 1
L1Course introductionSaman Amarasinghe
L2Introduction to Cell processorMichael Perrone, IBM
R1Getting to know Cell 
L3Introduction to parallel architecturesSaman Amarasinghe
 Quiz 1 
L4Introduction to concurrent programmingSaman Amarasinghe
 Project reviews 
L5Parallel programming conceptsRodric Rabbah, IBM
 Quiz 2 
L6Design patterns for parallel programming IRodric Rabbah, IBM
Week 2
R2-R3Cell programming hands-on 
L7Design patterns for parallel programming IIRodric Rabbah, IBM
 Quiz 3 
L8StreamIt languageBill Thies
R4Cell debugging tools 
L9Debugging parallel programsRodric Rabbah, IBM
 Quiz 4 
L10Performance monitoring and optimizationsRodric Rabbah, IBM
Week 3
L11Parallelizing compilersSaman Amarasinghe
 Quiz 5 
L12StreamIt parallelizing compilerSaman Amarasinghe
R5Cell profiling tools 
R6SIMD programming on Cell 
L13Star-PAlan Edelman
 Quiz 6 
L14Synthesizing parallel programsArvind
L15CilkBradley Kuszmaul
L16Introduction to game developmentMike Acton, Insomiac Games
Week 4
L17The Raw experienceRodric Rabbah, IBM
L18The futureSaman Amarasinghe
 Student project competition 
 Award ceremony