Lectures will be held on MW 2:40-3:55 pm in 227 MUDD
||MW 1:40-2:40, 468 CSB
||Tu 11:30-12:30, Th 2:30-3:30, 469 CSB
||F 2-4, TA Room, 1st Floor Mudd
Learning how to program parallel computers (multi-core, clusters)
productively and efficiently is a critical skill in this era of
concurrency. The course will provide an introduction to modern parallel
systems and their performance characteristics. It will cover the
fundamentals of data-structure design, analysis and implementation for
efficient parallel execution; programming abstractions for concurrency;
and techniques for reasoning about the behavior and performance of
parallel programs. Particular topics to be covered include: data
parallelism, fine-grained concurrency, locality, load-balancing,
overlapping computation with communication, reasoning about
deadlock-freedom, determinacy, safe parallelization, implementing
frameworks for concurrency (such as Hadoop Map/Reduce), debugging for
correctness and performance. Students will study many parallel programs
drawn from a variety of application domains (including high-performance
computing, large-scale graph analyses, machine learning, game playing)
Students will be expected to complete a series of parallel programming
homework assignments. The center-piece of the course will be a
semester-long team project focussed on implementing a challenging
programming problem with good performance on a cluster of multi-cores,
using a modern parallel language, X10.
Experience in Java, basic understanding of analysis of algorithms. COMS
W1004 and COMS W3137 (or equivalent).
All homeworks are due by 11:59PM on their duedate. You have one late day to
use throughout the semester. You may use it on the homework of your choosing.
No other extensions will be granted.
We take academic honesty extremely seriously, and expect the same of you.
In this course, you are free to discuss homework problems with your
classmates. However, each student is to write up his or her own solution
and is expected to be able to explain and reproduce the work she or she
submits. Please note the names of your collaborators at the top of your
homework submission. Apart from these exceptions, the Computer Science
Department's Academic Honesty
policy is in effect.
By this date you should have
Formed groups: You may group yourselves in duos or trios. By default
we expect everyone in a group to contribute equally and thus by
default each team will share a project grade. However if it becomes
clear that the contributions are grossly uneven across a group we
may adjust the scoring on an individual basis.
Select a project topic. By the end of the semester your goal will be
to implement a scalable (across multiple places) parallel
implementation of your selected topic. At this milestone you should
be asking yourselves the following questions: Do I understand this
problem? Is this problem data or compute intensive? Is there
sufficient work to parallelize across multiple workers and places?
Look for a "Project Topics" note on Piazza if you'd like some ideas
to get you started.
Be talking to Vijay, Martha and the TAs prior to this milestone to
help you refine your plans.
Write up a 1 page document listing your teammates and describing the
problem you've selected. Email this document to both TAs.
By this date you should have implemented a performant serial version of
your project code. For this milestone you will submit your code
(readable and commented), a makefile, test programs that test the
functionality of your code, programs that test performance of your code,
any files needed to run functionality and performance tests. Your make
file should be able to run your performance and functionality tests so
that all we need to do is run "make perftests" or "make functests" and
see the results.
By this date you should have implemented a functional concurrent
implementation of your code. You should submit your code (as in
Milestone 2), a 1 page design document outlining your parallelization
strategy, and a report describing how the performance of your code
scales. (It is not essential that your code scale *well* at this stage,
but you should begin measuring performance at this stage in order to
improve the performance in subsequent weeks.)
Each group will have ~30mins to present their projects to the course
staff. You should plan on a brief 10 min presentation followed by 15
mins of questions and discussion. At this time you will turn in your
code (commented, with makefiles and inputs as usual), a single page
design document and a report outlining the performance of your code.