Parallelism is the future. This course will enable students to design, implement, optimize, and verify programs to run on parallel processors. Our approach to this course reflects our view that a well designed software architecture is a key to designing parallel software, and a key to software architecture is design patterns and a pattern language. Our course will use this pattern language as the basis for describing how to design, implement, verify, and optimize parallel programs. Following this approach we will introduce each of the major patterns that are used in developing a high-level architecture of a program. These eight structural and thirteen computational patterns may be found at the: patterns wiki .
We also allow that writing efficient parallel programs requires insights into the hardware architecture of contemporary parallel processors as well as an understanding as to how to write efficient code in general. As a result a signficant amount of time in the course will be spent on these topics as well.
Other lectures and laboratories of the course will focus on implementation using contemporary parallel programming languages, verification of parallel software using invariants and testing, and performance tuning and optimization.
Course Software Platform:
Learning is easier when there is a consistent example used to demonstrate course concepts. This course will use as its consistent exemplar a software platform based on our own variant of the Smoke 2.0 video game. This video game will be used to demonstrate the computational and structural patterns of our pattern language as well as techniques for implementation and optimization.
Course Work and Grading:
The course consists of twice-weekly lectures and once-weekly lab sessions. For the first two thirds of the course, there will be a series of programming assignments. There will be a midterm and final examination.
The final third of the course will be an open-ended course project.
Course Projects: Students will create their own projects in project teams of 4-6 students. Teams will get to choose the particular nature of the project but each project will be an enhancement to one of the components of the video game: artificial intelligence (AI), physics, graphics, or special effects.
Professor: Kurt Keutzer
Guest Lecturer: Tim Mattson, Intel
TAs: Katya Gonina, David Sheffield
Course Meeting Times:
Lecture: Tuesday/Thursday 11 to 12:30 in Soda 306
Section: Wednesday 11 to 12 in Soda 330
Kurt's Office Hours: Wednesday 3 to 4PM in Soda 566
David's Office Hours: TBD
Katya's Office Hours: TBD
Course schedule and syllabus
Last change: August 24, 2012