Skip to main content

Parallelism and concurrency CS-206

About This Course

With every smartphone and computer now boasting multiple processors, the use of functional ideas to facilitate parallel programming is becoming increasingly widespread. In this course, you'll learn the fundamentals of parallel programming, from task parallelism to data parallelism. In particular, you'll see how many familiar ideas from functional programming map perfectly to to the data parallel paradigm. We'll start the nuts and bolts how to effectively parallelize familiar collections operations, and we'll build up to parallel collections, a production-ready data parallel collections library available in the Scala standard library. Throughout, we'll apply these concepts through several hands-on examples that analyze real-world data, such as popular algorithms like k-means clustering.

Learning Outcomes. By the end of this course you will be able to:

  • reason about task and data parallel programs,
  • express common algorithms in a functional style and solve them in parallel
  • competently microbenchmark parallel code,
  • write programs that effectively use parallel collections to achieve performance

Learning Prerequisites

Required courses

  • Functional programming (CS-210)
  • Algorithms (CS-250)
  • Computer Architecture (CS-208)

Recommended courses

  • System oriented programming (CS-207)

Important concepts to start the course

  • Functional programming and functional data structures
  • Algorithms and data structures

Course Staff

Course Staff Image #1

Viktor Kuncak

Viktor Kuncak is an associate professor in the EPFL School of Computer and Communication Sciences, where, since 2007, he leads the Laboratory for Automated Reasoning and Analysis ( He works in formal methods with emphasis on algorithms and tools, such as Leon tool for verification and synthesis of Scala programs ( His community service include co-chairing CAV 2017, SYNT 2015, FMCAD 2014, and VMCAI 2012. He also co-led an international COST Action to establish standardized formats for verification and synthesis (Rich Model Toolkit). His proposal on Implicit Programming, aiming to bridge the gap between human goals and their computational realizations, was funded in 2012 by a European Research Council (ERC) starting grant. Viktor Kuncak received a PhD degree from the Massachusetts Institute of Technology (MIT) in 2007.

Course Staff Image #1

Martin Odersky

Martin Odersky is a professor at EPFL in Lausanne, Switzerland. He has been working on programming languages for most of his career. He first studied structured and object-oriented programming as a PhD student of Niklaus Wirth, then fell in love with functional programming while working as a post doc at IBM and Yale. When Java came out, he started to add functional programming constructs to the new platform. This led to Pizza and GJ and eventually to Java 5 with generics. During that time he also developed javac, the current reference compiler for Java. Over the last 10 years, Martin worked on unifying object-oriented and functional programming in the Scala language. Scala quickly escaped from the research lab and became a popular open source tool and industrial language. He now oversees development of Scala as head of the programming group at EPFL and as chairman of the Typesafe company.

Frequently Asked Questions

What web browser should I use?

The courseware platform works best with current versions of Chrome, Firefox or Safari, or with Internet Explorer version 9 and above.

  1. Course Number

  2. Classes Start

  3. Classes End

  4. Estimated Effort

    ~6 hours per week