Moderne Rechnersysteme besitzen tiefe Speicherhierarchien, bestehend aus Registern, mehrstufigen Caches, Hauptspeicher und externen Speichermedien. Insbesondere besitzen heutige Multicore-Systeme eine sehr komplexe Speicherhierarchie, in welcher einige Speicher nur einzelnen Kernen zur Verfügung stehen, andere Speicher dagegen gemeinsam genutzt werden. Um bei rechenintensiven Anwendungen das Leistungspotential eines modernen Rechnersystems bestmöglich auszunutzen, muss diese Speicherhierarchie besondere Berücksichtigung finden, um die Zahl der Zugriffe auf langsame Speicher zu reduzieren.

Das Seminar beschäftigt sich sowohl mit der hardwareseitigen Realisierung von Speicherhierarchien als auch mit Entwicklung effizienter Algorithmen und Programme für Speicherhierarchien und knüpft damit an die Vorlesung Rechnerarchitektur und Rechnernetze an. Den Teilnehmern wird die Möglichkeit gegeben, auf Basis von etablierten Lehrbüchern oder Originalliteratur ihr Wissen in diesem Themengebiet zu festigen und zu vertiefen und gleichzeitig wichtige Vorkenntnisse für weiterführende Lehrveranstaltungen, Projekt- und Abschlussarbeiten des Lehrstuhl zu werben.

Jeder Teilnehmer präsentiert das von ihm gewählte Thema in einem Vortrag und stellt sich der anschließenden Diskussion. Weiterhin erstellt jeder Teilnehmer zu seinem Thema eine schriftliche Ausarbeitung (Seminararbeit).

Neben dem Wissenserwerb dient das Seminar vorrangig auch dem Erwerb von Soft-Skills, konkret dem Erlernen und Üben von Vortrags- und Präsentationstechniken sowie des Lesens, Verstehens und Erstellens fachspezifischer und wissenschaftlicher Texte.


  1. Introduction: Overview of current computer architectures, Multicore processors, TOP500 list
  2. Program analysis techniques: Control flow analysis, Data flow analysis
  3. Data dependence analysis: Classification, Array accesses, Loops
  4. Program transformation methods: Loop transformations for vectorization, parallelization, and locality improvements
  5. Thread programming with OpenMP
  6. Scheduling methods: Instruction scheduling, Trace scheduling, Task scheduling
  7. GPU programming
  8. Load balancing methods: Dynamic scheduling, Task pools, Task stealing

Selected parallel algorithms are presented. The range extends from basic, widespread algorithms (e.g., sorting) to complex algorithms from specific fields of application (e.g., computer graphics). Emphasis is put on algorithms from the field of scientific computing. The exercises cover theoretical problems as well as practical programming experience.

  1. Kurze Einführung in C
  2. Grundlegende Programmierkonzepte
  3. Aufbau und Verwaltung dynamischer Datenstrukturen
  4. Effiziente Lösung komplexer Probleme
  5. Einführung in die funktionale Programmierung
  6. Einführung in Skriptsprachen