Syllabus
From CS 152
This syllabus provides an overview of the topics to be covered in this course. The breakdown into weeks is approximate and should be used as a rough guideline only.
Introduction (1 week)
- The Eternal Struggle: Functional vs. Imperative styles
- Background: Parallel Computer Architectures
- The Scheme language
Lecture notes:
- Lecture 1: Class overview; why we're going to study concurrency
- Lecture 2: What makes a language? Functional Lisp core
- Lecture 3: Crash course in parallel architecture
Readings:
- David Patterson, Latency Lags Bandwidth
- Herb Sutter and James Larus, Software and the concurrency revolution
Pure Functional Programming and Data Parallelism (2 weeks)
- Programs as data
- First-class functions
- Map/reduce
- Futures
- C++ implementation techniques
Lecture notes:
- Lecture 4: Conclusion of architecture overview; Scoping and environments
- Lecture 5: Optimizing functional code: Revealing Imperativeness
- Lecture 6: Critical sections, compare-and-swap, Locks; Multiprocessor Memory Models (part 1)
- Lecture 7: Multiprocessor memory models; Google's Map/Reduce (part 1)
Assignments:
- Assignment 1: Pure functional Scheme interpreter; adding pure functional data-parallel constructs
- Assignment 2: Imperative constructs, exception handling, and optimistic parallelism
Imperative Programming and Explicit Parallelism (3 weeks)
- Abstract imperative store
- Memory semantics in parallel systems
- Locks
- Monitors
- Transactional Memory
- Lock-free Data Structures
- Continuations
- The Java Language
Lecture notes:
- Lecture 8: Google's Map/Reduce (part 2); Imperative Store Details; Exception Handling (part 1)
- Lecture 9: Exception Handling (part 2)
- Lecture 10: Transactional Memory
- Lecture 11: Transactional Memory Implementation
- Lecture 12: Implementation Redux; Non-blocking Data Structures
- Lecture 13: Continuations
- Lecture 14: GUEST LECTURE: Brian Kernighan on awk and scripting languages
Assignments:
- Assignment 3: CAS, Locks, and Non-blocking Data Structures
Readings:
Type Systems (2 weeks)
- Fundamental of Type Systems
- Polymorphism: Object-oriented, Generic, and Parametric
- Type inference
- Streams
- Ownership Types
- The Haskell language
- Fortress
Lecture Notes:
- Lecture 15: Introduction to Types
- Lecture 16: Types and Storage Representation; ADTs; Overview of Polymorphism
- Lecture 17: Intro to Haskell + Types
- Lecture 18: Subtype Polymorphism; co- and contra-variance
- Lecture 19: Guest lecture by Guy Steele - new ways of thinking about parallelism
- Lecture 20: Typestate tracking and Ownership Types
Assignments:
- Assignment_4(a), Project brainstorming.
- Assignment_4(b), Project proposal; Fortress.
Readings:
Grammars and Stream Parallelism (1 week)
Lecture Notes:
- Lecture 21: Review of interpretation vs. compilation; lexing and parsing, BNF
- Lecture 22: Precedence, Type Inference, and Attribute Grammars
- Lecture 23: Stream parallelism: StreamIt and Liquid Metal
Assignments:
- Assignment_5, Project language BNF; programming with polymorphism.
Semantics and Formal Reasoning (1 week)
- Formal Semantics
- Abstract Interpretation
- Model Checking
- Limits of formal systems under concurrency
Lecture Notes:
- Lecture 24: Operational Semantics and the IMP mini-language
- Lecture 25: Abstract Interpretation
Project Presentations (during reading/finals week)
Oral/visual presentations of final course project. Thursday May 14 10am-12n.
Things We Didn't Have Time For
Memory Abstractions and Management (1 week)
- Garbage Collection
- Concurrent/Parallel Collection
- Region-based Memory
- Partitioned Global Address Spaces
- Distributed Memory
- The SELF language
Time as a First-Class Concept (1 week)
- Real-time Programming
- Hardware Description Languages
- Music programming
