NDAK14009U  Parallel Functional Programming

Volume 2014/2015

The aim of the course is to introduce the principles and practice of parallel programming (i.e. programming using multiple hardware cores or processors in order to gain speed) in a functional programming language.
The course covers different 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.
The lectures will provide an overview of approaches to parallel (and concurrent) programming in Haskell and Erlang, and give practical instructions to writing, testing, and optimising parallel functional programs. The topics covered in the lecture will be exercised in lab assignments, consisting of programming and analysis of programs as well as questions for theoretical discussion.

Learning Outcome



  • explain salient aspects of concurrency and parallelism and distinguish the concepts
  • describe different well-known parallelisation strategies, programming patterns and program skeletons
  • give comprehensive overview of the different approaches to parallelism in functional programming languages, with particular focus on parallel Haskell dialects and Erlang




  • write, modify, and test parallel functional programs, in different parallel Haskell dialects and in Erlang, targeting different architectures such as multicore workstations, compute clusters, and GPUs
  • produce and interpret profiling data from program executions, and optimise programs according to this interpretation




  • identify opportunities for using functional programming to parallelise algorithms
  • given an algorithm and a hardware platform, select a suitable programming language/dialect and implement a parallel version of the algorithm


The course does not use a single textbook, but instead provides tutorials and scientific papers available from the course pages.
Textbooks for parallel Haskell and Erlang exist (references will be provided), but none of them covers all topics discussed in the course.

The course syllabus assumes basic knowledge and programming competences in Haskell and Erlang, which, at DIKU, can be acquired through ”Advanced programming”, or through self-study.
Lectures, in-class exercises, group work on programming and analysis assignments.
7,5 ECTS
Type of assessment
Written examination, 4 hours under invigilation
The written exam is scheduled to take 4 hours and covers theoretical and practical topics taught in the lectures and practised in the lab assignments.
Exam registration requirements
3 or 4 lab exercises (solved in pairs or individually) will be assessed on a 5 point scale. In total, at least 50% of the possible points for lab exercises must be obtained for participation in the final examination.
Only certain aids allowed

The allowed aids are max. 2 sheets of hand-written or typed pre-written material (from any source).

Marking scale
7-point grading scale
Censorship form
No external censorship
several internal examiners
30 min oral examination, without preparation.
Criteria for exam assesment

see learning outcome

  • Category
  • Hours
  • Lectures
  • 32
  • Preparation
  • 32
  • Exercises
  • 24
  • Practical exercises
  • 48
  • Study Groups
  • 66
  • Exam
  • 4
  • Total
  • 206