CS267

UC Berkeley CS267 / E233 Home Page

Applications of Parallel Computers

Spring 2017

Mon/Wed 10:30am-12pm, 306 Soda Hall

Instructors:

Teaching Assistants:

  • Marquita Ellis (send email), office Hours: Wednesdays 12-2pm, in the 5th floor graduate student lounge (Soda Hall 551)
  • Jenny Huang (send email), office Hours: Mondays 3-4pm, in Visual Computing Lab (Soda 5th floor), Wednesdays, 3-4pm in Soda 580 in ASPIRE lab

Homework:

Motivation

CS267 is designed to teach students how to program parallel computers to efficiently solve challenging problems in science and engineering, where high performance computers or clusters are required either to perform complex simulations or to analyze enormous datasets. It is intended to be useful for students from many departments and with different backgrounds, although we will assume reasonable programming skills in a conventional (non-parallel) language, as well as enough mathematical skills to understand the problems and algorithmic solutions presented. CS267 satisfies part of the course requirements for the Designated Emphasis ("graduate minor") in Computational Science and Engineering.

But the course also addresses the broader issue that since the mid 2000's: not only are the fastest computers parallel, but nearly all computers are parallel, because the physics of semiconductor manufacturing will no longer lets conventional sequential processors get faster year after year, as they had historically. So all programs that need to run faster will have to become parallel programs.  The types of processors is also changing towards smaller simpler processors and more complex memory architectures in an effort to continue boosting performance.  For background on these trends, see the  Berkeley View report. These changes are not limited to science and engineering but affect the entire computing industry, which has depended on selling new computers by running their users' programs faster without the users having to reprogram them. Today computers from mobile phones and embedded devices to supercomputer and cloud data centers are parallel, and programmers faced with performance goals for software need to understand how to take advantage of various types of parallelism.

Students in CS267 will get the skills to use some of the best existing parallel programming tools, will learn how to analyze and tune for performance, and will get an overview of parallel architectures, algorithms, and applications as well a number of open research questions.

Syllabus


Sharks and Fish

  • "Sharks and Fish" are a collection of simplified simulation programs that illustrate a number of common parallel programming techniques in various programming languages (some current ones, and some old ones no longer in use).
  • Basic problem description, and (partial) code from 1999 class, written in Matlab, CMMD, CMF, Split-C, Sun Threads, and pSather, available here.