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.
Outline:
Unit 1: Introduction and Motivation
Unit 2: X10
Unit 3: Performance Debugging
Unit 4: Safe Parallelization
Unit 5: Indeterminacy
Unit 6: Blocking Synchronization
Teaching Staff:
Vijay Saraswat, Instructor
Email: vs2345@columbia.edu
Office Hours: MW 2:30-4:00, CSB 468
Martha Kim, Instructor
Email: martha@cs.columbia.edu
Office Hours: TuTh 3:30-5:00, CSB 469