zum Inhalt springen
SS 2018

Architektur und Programmierung von Grafik- und Koprozessoren

Terminankündigung:

Am 19.7.2018 findet im gewohnten Vorlesung + Übung Zeitslot die Probeklausur statt. Dauer: 3 Stunden. Am 20.7.2018 werden ausgesuchte Aufgaben daraus besprochen.

Koprozessoren komplementieren die CPU von PCs, Workstations und Server Systemen, da sie spezielle Aufgaben schneller ausführen können, als die CPU es kann. Eine wichtige Art von Koprozessoren, die in den frühen 2000er Jahren entwickelt wurden, sind Grafik Koprozessoren, die i. d. R. als Einschubkarten mit dem Main Board verbunden werden. Grafikprozessoren führen typischerweise die gleiche Aufgabe (z. B. Transformation von Vertizen oder Shading von Pixeln) auf sehr vielen Instanzen auf ein Mal aus, und sind deshalb prädestiniert für hochparallele SIMD Architekturen. Während frühe Grafikprozessoren über dedizierte Recheneinheiten für die zuvor erwähnten Aufgaben verfügten, exponieren moderne Unified Shader Architekturen hunderte bis tausende Rechenkerne, die jeden Rendering bezogenen Task und sogar General Purpose Computing Tasks ausführen können. Da GPUs massiv parallel sind, sind sie heutzutage aus der High Performance Computing (HPC) Welt nicht mehr wegzudenken. Grafikprozessoren haben darüber hinaus die Entwicklung von Many Core Architekturen wie etwa der Intel Xeon PHI Prozessorfamilie maßgeblich mit beeinflusst.

Im Laufe der Vorlesung werden zunächst Grafikprozessoren und ihre historische Entwicklung wiederholt. Ausgehend davon wird eine Systematik zum Verständnis moderner GPU Architekturen entwickelt. Es werden GPGPU Programmierkonzepte sowie neuere Konzepte wie Compute Shader oder das Vulkan API behandelt. Im Verlauf der  Vorlesung werden die erlernten Konzepte auch auf andere Prozessorarchitekturen angewandt, sowie auf Systeme, in denen mehrere Koprozessoren verbaut sind. Eine Reihe von Vorlesungseinheiten wird sich dediziert mit Anwendungen befassen, die  von Koprozessor Implementierungen profitieren können. In den Übungen werden die  erlernten Konzepte anhand von Anwendungsbeispielen vertieft.

Folien zur Vorlesung

  1. Do, 12.4.2018
    Motivation und Übersicht (pdf)
    Performanz von Computerprogrammen (1) (pdf)
    (Inhalte: Performanzbegriff, Mooresches Gesetz, Powerwall)
  2. Fr, 13.4.2018
    Performanz von Computerprogrammen (2) (pdf)
    (Inhalte: Caches, Pipelining, SIMD)
  3. Do, 19.4.2018
    Performanz von Computerprogrammen (3) (pdf)
    (Inhalte: Multi-Threading, NUMA, Verteilte Speichersysteme)
    Sonderübung zu C++ (pdf)
  4. Fr, 20.4.2018
    Performanz von Computerprogrammen (4) (pdf)
    (Inhalte: Amdahlsches Gesetz, Parallele Algorithmen)
  5. Do, 26.4.2018
    Rendering Algorithmen (1) (pdf)
    (Inhalte: Grundlagen Computergrafik)
  6. Fr, 27.4.2018
    Rendering Algorithmen (2) (pdf)
    (Inhalte: Sampling Theorie, Rasterisierungsalgorithms)
  7. Do, 3.5.2018
    Rendering Algorithmen (3) (pdf)
    (Inhalte: Rasterisierung Laufzeit, Deferred Shading, Strahlverfolgung)
  8. Fr, 4.5.2018
    Rendering Algorithmen (4) (pdf)
    (Inhalte: Strahlverfolgung, Beschleunigungsdatenstrukturen)
  9. Fr, 11.5.2018
    Rendering Algorithmen (5) (pdf)
    (Inhalte: BVH Konstruktion, Volume & Paralleles Rendering)
  10. Do, 17.5.2018
    Rendering Algorithmen (6) (pdf)
    Die Grafik Pipeline (1) (pdf)
    (Inhalte: Paralleles Rendering, Radix-k, Rendering APIs)
  11. Fr, 18.5.2018
    Die Grafik Pipeline (2) (pdf)
    (Inhalte: Shader, Historische Entwicklung von GPUs)
  12. Fr, 1.6.2018
    Die Grafik Pipeline (3) (pdf)
    (Inhalte: Host Interface - Grafiktreiber und Command Prozessor)
  13. Do, 7.6.2018
    Die Grafik Pipeline (4) (pdf)
    (Inhalte: Vertex Phase, Primitive Assembly)
  14. Fr, 8.6.2018
    Die Grafik Pipeline (5) (pdf)
    (Inhalte: Raster, Fragment und Output Phase, Kompression)
  15. Do, 14.6.2018
    Die Grafik Pipeline (6) (pdf)
    Programmieren mit dem Vulkan API (1) (pdf)
    (Inhalte: Synchronisation, Mobile GPUs, Vulkan Loader)
  16. Fr, 15.6.2018
    Programmieren mit dem Vulkan API (2) (pdf)
    (Inhalte: Instanzen, Extensions, Layers, Phys. Devices)
  17. Do, 21.6.2018
    Programmieren mit dem Vulkan API (3) (pdf)
    (Inhalte: Logical Device, Swap Chains, Shader Module)
    Sonderübung zu Git (Shell Skripte) (tar.gz)
  18. Fr, 22.6.2018
    Programmieren mit dem Vulkan API (4) (pdf)
    (Inhalte: Grafik Pipeline, Framebuffers, Rendering)
  19. Do, 28.6.2018
    General Purpose Programmierung auf Grafikprozessoren (1) (pdf)
    (Inhalte: Stream Computing, CUDA Speichermodell)
  20. Fr, 29.6.2018
    General Purpose Programmierung auf Grafikprozessoren (2) (pdf)
    (Inhalte: CUDA Compiler, Kernels und Runtime API)
  21. Do, 5.7.2018
    General Purpose Programmierung auf Grafikprozessoren (3) (pdf)
    (Inhalte: CUDA Shared Memory, Texturspeicher, Streams)
  22. Fr, 6.7.2018
    General Purpose Programmierung auf Grafikprozessoren (4) (pdf)
    Sortieren auf GPUs (1) (pdf)
    (Inhalte: Thrust, Multi-GPU, Sortiernetzwerke)
  23. Do, 12.7.2018
    Sortieren auf GPUs (2) (pdf)
    (Inhalte: Bitonic Sort, Implementierung mit CUDA)
  24. Fr, 13.7.2018
    Wiederholung ausgesuchter Themen

Übungsblätter

Vorlesung:Architektur und Programmierung von Grafik- und Koprozessoren in Klips2

Donnerstags, 12.00-13.30 Uhr
Beginn: 12.4.2018
Raum: Großer Hörsaal XXX ("Alte Botanik", Gyrhofstraße 15)

Freitags, 12.00-13:30 Uhr
Raum: Hörsaal H80, Philosophikum (Universitätsstraße 41)

Übung:Architektur und Programmierung von Grafik- und Koprozessoren in Klips2


Donnerstags, 14.00-15.30 Uhr
Beginn: 12.4.2018
Raum: Großer Hörsaal XXX ("Alte Botanik", Gyrhofstraße 15)
Begleitmaterial:ILIAS E-Learning-System (Nur für Vorlesungsteilnehmer)
Mailing-Liste:apgk-vorlesung