NDAK14009U Parallel Functional Programming (PFP)

Volume 2016/2017
Content

Parallel functional programming emphasizes the declarative nature of functional programming for making explicit, and for utilizing, the rich possibilities for parallelising computations.

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 setting. The course covers both multi-core parallel programming (for MIMD CPU programming) and many-core parallel programming (as for SIMD GPGPU programming).

The course includes 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 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

Knowledge of

  • the difference between the concepts of concurrency and parallelism, and between data parallelism and task parallelism
  • well-known parallelisation strategies, programming patterns, and program skeletons
  • different approaches to parallelism in functional programming languages, with particular focus on parallel extensions of sequential functional languages, and functional combinators for data-parallel bulk operations 

 

Skills to

  • express a parallel computation in the functional paradigm
  • write, modify, and test parallel functional programs, in different programming environments, targeting different architectures such as multi-core CPUs and GPGPUs

 

Competences to

  • identify opportunities for using functional programming to parallelise algorithms
  • select a suitable programming language/dialect to implement a parallel algorithm on a given hardware platform

The course does not use a single textbook, but instead provides tutorials and scientific papers available from the course pages.

The course syllabus assumes basic knowledge and programming competences in Haskell (or another functional programming language), which, at DIKU, can be acquired through ”Advanced programming”, or through self-study.
Lectures, in-class exercises, group work on programming and analysis assignments.
  • Category
  • Hours
  • Exam
  • 1
  • Exam Preparation
  • 10
  • Exercises
  • 15
  • Guidance
  • 2
  • Lectures
  • 28
  • Preparation
  • 50
  • Project work
  • 100
  • Total
  • 206
Credit
7,5 ECTS
Type of assessment
Continuous assessment
Continuous evaluation based on 3-4 individual assignments and a group mini-project with individual oral defence.
Aid
All aids allowed
Marking scale
7-point grading scale
Censorship form
No external censorship
several internal examiners
Re-exam

Resubmission of assignments and/or mini-project + 30 min oral examination without preparation in full course syllabus.

Criteria for exam assesment

see learning outcome