Winter semester 2023/2024

The content on this page was translated automatically.

After a general overview of computer science, the course focuses on learning programming using the Java language as an example. It teaches practical skills in creating your own small Java programs as well as basic, language-independent concepts of program structuring and implementation. This includes, for example, expressions vs. statements, data types, methods with parameter passing mechanisms, compiler vs.  interpreter, memory spaces and recursion. Students also get a first look at the Java class library; object-oriented, functional, and parallel programming; and Python as another programming language.

Example programs implement well-known search and sorting procedures, among other things. Background information includes the design principle of divide-and-conquer and asymptotic runtime evaluation using O-notation. Furthermore, approaches to ensure the correctness of programs such as assertions and debugging are discussed. In the practical exercises, great emphasis is placed on developing a good programming style.

Bachelor Computer Science, Mathematics, Physics and Technomathematics

6 SWS (9 credits)


More information about the lecture and the exercises can be found in the HIS and the Moodle course. If you have any questions, Prof. Dr. Claudia Fohry and M.Sc. Rüdiger Nather will be happy to answer them.

The course starts with an introduction to the subject, application areas and basic concepts of parallel computing. We cover design techniques for parallel algorithms (e.g., paralles divide-and-conquer) as well as general requirements for the design of efficient programs (e.g., cache optimization).

Using three exemplary programming systems, basic knowledge of parallel programming is then taught in the main section:

  • OpenMP for shared memory computers,
  • "APGAS for Java" for computers with distributed or hybrid memory and
  • CUDA for GPUs.

Two practical sections are integrated into the course, in which the participants solve programming tasks in teams of two. The results are then presented in examination discussions and form the basis for the assessment of the course.

Bachelor Computer Science

4 SWS (6 credits)


Further information, including lecture dates, can be found in the course catalog and in the Moodle course. If you have any questions, Dr. Jonas Posner will be happy to answer them.

The course first covers the established programming systems OpenMP and MPI in greater depth than in the bachelor's program. Emphasis will be placed 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. The focus is on the design goals of performance and scalability. In addition, some more complex synchronization problems will be discussed.

In the second part of the course, current parallel programming systems will be presented and compared with established systems. Typical approaches of these systems are Partitioned Global Address Space (PGAS) and Asynchronous Many-Task Programming AMT. Individual languages will be learned and tested, e.g. Cilk, Chapel, HPX and Charm++. In addition, we discuss cross-cutting topics such as design patterns, fault tolerance, and elasticity.

To attend the course, prior knowledge from Introduction to Parallel Processing is an advantage, but not mandatory. The course is divided into a lecture and a practical part. The practical part includes the development of programs with the discussed programming systems. In the practical course you will typically work in teams of two. The internship, together with a final discussion, forms the basis for the evaluation of the course.

Master Computer Science

4 SWS (6 credits)


For more information, including lecture dates, see the course catalog and the Moodle course. If you have any questions, Prof. Dr. Claudia Fohry and M.Sc. Rüdiger Nather will be happy to answer them.