Winter Semester 2026/2027
The content on this page was translated automatically.
All courses are organized through the Moodle learning platform. If you would like to participate in one of the courses listed below, please register for the corresponding Moodle course.
After providing a general overview of computer science, the course focuses on learning to program using the Java language as an example. It teaches both practical skills in creating small Java programs and fundamental, language-independent concepts of program structure and implementation. These include, for example, expressions vs. statements, data types, methods with parameter passing mechanisms, compilers vs. interpreters, memory areas, and recursion. In addition, students gain an initial insight into the Java class library; into object-oriented, functional, and parallel programming; and into Python as another programming language.
Sample programs implement, among other things, well-known search and sorting algorithms. Background information on these topics includes the divide-and-conquer design principle and asymptotic time complexity analysis using O-notation. Furthermore, approaches to ensuring program correctness, such as assertions and debugging, are discussed. In the practical exercises, great emphasis is placed on developing good programming style.
Instructor
Prof. Dr. Claudia Fohry
All course-related information, materials, and announcements can be found in our Moodle course.
If you have any questions, Prof. Dr. Claudia Fohry and Dr. Mia Reitz will be happy to assist you.
The course begins with an introduction to the subject matter, areas of application, and basic concepts of parallel computing. We will cover design techniques for parallel algorithms (e.g., parallel divide-and-conquer) as well as general requirements for designing efficient programs (e.g., cache optimization).
Using three exemplary programming systems, the main part of the course will then cover the fundamentals of parallel programming:
- OpenMP for shared-memory computers,
- CUDA for GPUs, and
- MPI for computers with distributed memory.
The course includes two lab sessions in which participants work in pairs to solve programming tasks. The results are then presented in oral exams and form the basis for the course grade.
Instructor
Prof. Dr. Claudia Fohry
M.Sc. Rüdiger Nather
All course-related information, materials, and announcements can be found in our Moodle course.
If you have any questions, Prof. Dr. Claudia Fohry and M.Sc. Rüdiger Nather will be happy to assist you .
The course begins by covering the established programming systems OpenMP and MPI in greater depth than in the bachelor’s program. The focus is on advanced language constructs such as OpenMP tasks, MPI communicators, and hybrid MPI/OpenMP programming. We will discuss the use of these constructs using example applications, with a focus on the design goals of performance and scalability. In addition, we will discuss some more complex synchronization problems.
In the second part of the course, current parallel programming systems are introduced and compared with the established systems. Typical approaches used by these systems include the Partitioned Global Address Space (PGAS) and Asynchronous Many-Task (AMT) programming. Students will learn and experiment with specific languages, such as Cilk, Chapel, and Kokkos.
Prior knowledge from the course “Introduction to Parallel Processing” is beneficial but not required to take this course. The course is divided into a lecture component and a lab component. The lab component involves developing programs using the programming systems covered in the course. In the lab, you will typically work in teams of two. The lab, together with a final presentation, forms the basis for the course evaluation.
Instructor
Prof. Dr. Claudia Fohry
M.Sc. Rüdiger Nather
All course-related information, materials, and announcements can be found on our Moodle course page.
If you have any questions, Prof. Dr. Claudia Fohry and Mr. Rüdiger Nather will be happy to assist you.