U.C. Berkeley CS267 Home Page
Applications of Parallel Computers
T Th 9:30-11:00, 306 Soda Hall
Syllabus and Motivation
CS267 was originally designed to teach students how to
program parallel computers to efficiently solve
challenging problems in science and engineering,
where very fast computers are required
either to perform complex simulations or to analyze enormous datasets.
CS267 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.
While this general outline remains, a large change
in the computing world started in the mid 2000's:
not only are the fastest computers
parallel, but nearly all computers are becoming parallel,
because the physics of semiconductor manufacturing
will no longer let conventional sequential processors
get faster year after year, as they have for so long
(roughly doubling in speed every 18 months for
many years). So all programs that need to
run faster will have to become parallel programs.
(It is considered very unlikely that compilers will be
able to automatically find enough parallelism in most
sequential programs to solve this problem.)
For background on this trend toward parallelism, click
This is a huge change not just for science
and engineering but the entire computing industry,
which has depended on selling new computers by running
their users' programs faster without the users
having to reprogram them. Large research activities
to address this issue are underway at many computer
companies and universities, including
and its predecessor the
A summary of the ParLab's research agenda, accomplishments,
and remaining challenges may be found
While the ultimate solutions to the parallel programming
problem are far from determined, students in CS267 will
get the skills to use some of the best existing parallel programming
tools, and be exposed to a number of open research questions.
There will be several programming assignments to acquaint students
with basic issues in memory locality and parallelism needed for
high performance. (Note: plan to redesign the third programming assignment
to solve a different problem, a graph problem arising in genomics.)
Most of the grade will be based on a final project
(in which students are encouraged to work in small interdisciplinary teams),
which could involve parallelizing an interesting application, or
developing or evaluating a novel parallel computing tool. Students
are expected to have identified a likely project by mid semester,
so that they can begin working on it. We will provide many suggestions
of possible projects as the class proceeds.
Outside of lecture, you are welcome to bring your questions to office hours
(posted at the top of this page). If you cannot physically attend office hours,
you may contact the instructor team via the
We encourage you to post your questions to the
CS267 Piazza page
(you need to sign up first).
If you send a question to the instructor email, we may answer your question
on Piazza if we think it might help others in the class.
During lecture, remote students can also email their questions to
which the teaching assistants will be monitoring during lecture.
Depending on the question, the teaching assistants will either
answer by email, or ask the instructor to answer during the lecture.
You will also submit homeworks via the
please check with assignment-specific submission instructions first.
You are welcome to suggest your own class project, but you may also look at
the following sites for ideas:
Lecture Notes and Video
Sharks and Fish