Syllabus

From CS 152

Jump to: navigation, search

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.

Contents

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:

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:

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:

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:

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