The lecture provides an introduction to C++ programming. Basics programming concepts such as types, statements, functions, pointers, memory management and data structures are introduced. Best practices as well as the organization and development of C++ projects are discussed. An introduction to C++ compilers, debugging concepts and development tools is provided.
In hands-on sessions, programming exercises are used to discuss and illustrate the presented content.
- Kursleiter/in: Manuel Saberi
- Kursleiter/in: Andreas Vogel
The lecture covers programming concepts such as
- procedural programming, including data types, statements and functions,
- object-oriented programming, including encapsulation, polymorphism and inheritance,
- generic programming.
Furthermore, fundamental data structures as well as efficient algorithms are presented, relevant software libraries are surveyed, and the organization of software projects is discussed.
In hands-on sessions, programming exercises are used to discuss and illustrate the presented content, employing the Python programming language for selected scientific applications.
- Kursleiter/in: Manuel Saberi
- Kursleiter/in: Andreas Vogel
The lecture covers the theory and application of quantum computing from a computer science perspective with a focus on the usage of today’s quantum hardware.
The relevant basics of quantum mechanics including superposition, measurement, interference, entanglement and mathematical notation are introduced. The characteristics of quantum bits and registers are discussed, and the construction and properties of quantum gates and quantum circuits presented. Prominent examples for quantum algorithms are surveyed including algorithms based on quantum Fourier transformation (e.g. Shor’s factoring), quantum search (e.g. Grover) and quantum solution of linear systems of equations (e.g. HHL). Current quantum computer hardware, including gate-based and adiabatic quantum computers, as well as quantum error correction are discussed.
An introduction to quantum programming languages and environments will be provided. Hands-on programming exercises and self-implemented quantum circuits in study projects are used to discuss and illustrate the theoretical content. Implementations are tested on quantum simulators and cloud- based quantum hardware.
- Kursleiter/in: Sahir Nawaz Butt
- Kursleiter/in: Andreas Vogel
The lecture deals with the parallelization on cluster computers. Distributed-memory programming concepts (MPI) are introduced and best-practice implementation is presented based on applications from scientific computing including the finite element method and machine learning.
Special attention is paid to scalable solvers for systems of equations on distributed-memory systems, focusing on iterative schemes such as simple splitting methods (Richardson, Jacobi, Gauß-Seidel, SOR), Krylov-methods (Gradient descent, CG, BiCGStab) and, in particular, the multigrid method. The mathematical foundations for iterative solvers are reviewed, suitable object-oriented interface structures are developed and an implementation of these solvers for modern parallel computer architectures is developed.
Numerical experiments and self-developed software implementations are used to discuss and illustrate the theoretical results.
- Kursleiter/in: Manuel Saberi
- Kursleiter/in: Andreas Vogel
The lecture addresses advanced topics in C++ programming. Object-oriented programming concepts such as classes, inheritance and polymorphism as well as generic programming concepts such as templates are introduced. The standard template library (STL) and selected functionalities from C++14 and above are surveyed. Best practices as well as the organization and development of advanced C++ projects are discussed.
In hands-on sessions, programming exercises are used to discuss and illustrate the presented content.
- Kursleiter/in: Manuel Saberi
- Kursleiter/in: Andreas Vogel
The lecture addresses parallelization on multicore processors. Thread-based programming concepts and techniques, including pthreads, C++11 threads, OpenMP and SYCL, are introduced and best practices are highlighted using applications from scientific computing.
An overview of the relevant hardware aspects including multicore architectures and memory hierarchies is provided. An in-depth introduction to multi-threaded programming on multicore systems with special emphasis on shared-memory parallelization is given and parallelization patterns, thread management and memory access strategies are discussed.
In hands-on sessions, programming exercises are used to discuss and illustrate the presented content.
- Kursleiter/in: Manuel Saberi
- Kursleiter/in: Andreas Vogel