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 concurrently and parallely. The course covers common problems, best-practices, general architectural concepts, frameworks and languages which target the development of concurrent and parallel programs.

Specifically, we will cover:

  • Definitions and foundational concepts
  • Parallelism in multi-core single systems:
    • Threads (Java)
    • Futures (Java)
    • ThreadPools / Executor (Java)
    • Coroutines
    • Safe Concurrent Programming: Ownership, Moves, Borrowing, Type Safety, Channels (Rust)
    • Actor-Modell (Akka)
    • MapReduce

Lecture and Exercises:

The course will contain significant practical aspects. Small programming exercises will be part of the lecture accompanied by weekly assignments.

Learning objectives:

The learning objectives of the course are the following:

Knowledge and understanding:

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

Skills and abilities:

  • avoid common mistakes by applying best practices
  • use 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 concurrent and parallel applications
Termine

Dienstag, 12:00-13:30, O27-2203 (Vorlesung)

Donnerstag, 16-18, O27-123 (Übung)