Parallel Functional Programming

Course topics

Part 1.
  • Programming paradigms.
  • Why functional programming?
  • Expressions and their computational model.
  • Conditionals and boolean expressions.
  • Value definitions.
Part 2.
  • Internal definitions.
  • Block structures and lexical scoping.
  • Procedures and computational processes
Part 3.
  • Functions as data. Combining functions.
  • Higher-order functions (HOFs).
  • Function literal.
Part 4.
  • Closures.
  • Currying.
  • Map and reduce example.
  • Types and polymorphic functions.
Part 5.
  • Correctness of programs.
  • Data abstraction.
    • Functions as data abstraction mechanism.
    • Specialised data abstraction mechanism – classes
Part 6.
  • Recursive definitions of data structures.
  • Structural induction.
  • Hierarchical data and pattern matching.
Part 7.
  • Processing elements in containers.
  • Singly linked list, polymorphism.
  • Lazy computations.
Part 8.
  • Introduction to parallel computing.
  • Basic primitives to express parallel computing.
  • Benchmarking program performance.
  • Basic parallel constructs.
Part 9.
  • First-class task parallelism.
  • How fast can we get with parallel computations?
  • Data-parallel operations map, fold and scan.
  • Parallel functoriality (aka parallel map)
Part 10.
  • Monoids, associativity and parallelism.
  • Folding (reducing) in parallel.
  • Scanning in parallel.
  • Task vs data parallelism.

Prerequisites

Strong knowledge and experience in procedural programming and discrete math (set & number theories).