Parallele Programmierung

Die Veranstaltung wird in Deutsch mit englischsprachigen Unterlagen durchgeführt.

The rise of multi-core and many-core systems and clusters requires that software engineers develop software which is executed parallely. The course covers common problems, best-practices, general architectural concepts, frameworks and languages which target the development of parallel programs.

Specifically, we will cover:

  • Definitions and foundational concepts
  • Parallelism in multi-core single systems:
    • Threads (Java)
    • Futures (Java)
    • ThreadPools / Executor (Java)
    • Coroutines (Kotlin)
    • Safe Concurrent Programming: Ownership, Moves, Borrowing, Type Safety, Channels (Rust)
    • Automated Parallelism (Haskell)
    • Actor-Modell (Acca)
  • Distributed parallelism
    • BSP
    • MapReduce
    • SparkX (Scala)

Lecture and Exercises:

The course will contain significant practical aspects. Small programming exercises will be part of the lecture accompanied by weekly assignments. The course finishes with a 3-week big exercise solving a real-live problem.

Learning objectives:

The learning objectives of the course are the following:

Knowledge and understanding:

  • explain the common problems arising from parallelism and possible solutions
  • explain different frameworks to exploit parallelism and how they can be used
  • explain how language paradigms support the development of parallel applications
  • explain the following concepts: threads, processes, interprocess-communication, multi-agent systems,

Skills and abilities:

  • avoid common mistakes by applying best practicesuse frameworks to develop parallel
  • applications on multi-core systems and clusters
  • use different languages and frameworks by applying knowledge about general concepts

Judgement and approach:

  • select appropriate concepts, languages and frameworks for developing parallel application


Dienstag, 12-14, O27-2203 (Übung)

Donnerstag, 16-18, O27-123 (Vorlesung)