Aim
The aim of the course is to introduce the principles and practice of parallel programming in a functional programming language.
By parallel programming, we mean programming using multiple hardware cores or processors in order to gain speed.
The course covers approaches to parallel functional programming in both Haskell and Erlang. It covers current research on these topics,
and relies heavily on scientific papers as its source materials.
Syllabus
-
The course covers the principles and practice of parallel programming in both Haskell and Erlang.
-
Advantages of functional approaches to parallelism: immutability, absence of data races, determinism.
-
Profiling parallel functional programs: granularity, bottlenecks, locality, data-dependencies.
-
Parallel functional algorithms: divide-and-conquer.
-
Approaches to expressing parallelism in Haskell: the Eval monad, the Par monad, parallel strategies, skeletons, data parallelism.
-
Functional approaches to GPU programming
-
Parallelisation and distribution for Erlang. Scalability. Handling errors in a massively parallel system.
-
Case studies of industrial parallel functional programming, such as map-reduce and scalable no-SQL databases.
-
Guest lectures by leading researchers and practitioners.
Learning outcomes:
- Knowledge and understanding
- Distinguish between concurrency and parallelism.
- Give an overview of approaches to parallelism in functional programming languages in the scientific literature.
- Skills and abilities
- Write, modify and test parallel functional programs, to run on a variety of architectures such as shared memory multiprocessors, networks of
commodity servers, and GPUs.
- Interpret parallelism profiles and address bottlenecks.
- Judgement and approach
- Identify when using a functional language may be appropriate for solving a parallel programming problem.
- Select an appropriate form of parallel functional programming for a given problem, and expain the choice.
Context
The prerequisite for the course is to have successfully completed two years within the subject Computer Science or equivalent.
Course participants must also have completed an introductory course in Functional programming, preferably using Haskell or Erlang.
(Examples at Chalmers are TDA452 and TDA555).
Course Evaluation
For the purpose of course evaluation each course has student
representatives. Their role includes giving the teachers
feedback on the course.
Chalmers central instructions on course evaluation