<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<document>
<title>Multicore- und GPU-Computing</title>
<cid>PIM-MGPU</cid>
<sapsubmodule>P221-0140</sapsubmodule>
<bkey>pim2</bkey>
<ctypes>
<hours>2</hours>
<type>V</type>
<hours>2</hours>
<type>P</type>
</ctypes>
<cp>6</cp>
<semester>1</semester>
<mandatory>nein</mandatory>
<language>Deutsch</language>
<exam>
</exam>
<curriculum>
<curriculum_entry>
<cid>KIM-MGPU</cid>
<branch>Kommunikationsinformatik</branch>
<semester>1</semester>
<mandatory_tag>Wahlpflichtfach</mandatory_tag>
</curriculum_entry>
<curriculum_entry>
<cid>MTM.GPU</cid>
<branch>Mechatronik</branch>
<semester>1</semester>
<mandatory_tag>Wahlpflichtfach</mandatory_tag>
</curriculum_entry>
<curriculum_entry>
<cid>PIM-MGPU</cid>
<branch>Praktische Informatik</branch>
<semester>1</semester>
<mandatory_tag>Wahlpflichtfach</mandatory_tag>
</curriculum_entry>
<curriculum_entry>
<cid>PIM-MGPU</cid>
<branch>Praktische Informatik</branch>
<semester>1</semester>
<mandatory_tag>Wahlpflichtfach</mandatory_tag>
</curriculum_entry>
<curriculum_entry>
<cid>TIM-MGPU</cid>
<branch>Technische Informatik</branch>
<semester>1</semester>
<mandatory_tag>Wahlpflichtfach</mandatory_tag>
</curriculum_entry>
</curriculum>
<workload>
Die Präsenzzeit dieses Moduls umfasst bei 15 Semesterwochen 60 Veranstaltungsstunden (= 45 Zeitstunden). Der Gesamtaufwand des Moduls beträgt bei 6 Creditpoints 180 Stunden (30 Stunden/ECTS Punkt). Daher stehen für die Vor- und Nachbereitung der Veranstaltung zusammen mit der Prüfungsvorbereitung 135 Stunden zur Verfügung.
</workload>
<prerequisites>
</prerequisites>
<prerequisitesfor>
</prerequisitesfor>
<convenor>Prof. Dr. Jörg Keller</convenor>
<convenor-person-key>jke</convenor-person-key>
<lecturers>
<lecturer>Prof. Dr. Jörg Keller</lecturer>
<lecturer-person-key>jke</lecturer-person-key>
</lecturers>
<objectives>Im Modul &quot;Multicore- und GPU-Computing&quot; werden die Studierenden mit den beiden am weitest verbreiteten
Programmiermodellen für Mehrkernsysteme vertraut gemacht:
- OpenMP für Multicore-CPUs
- CUDA und OpenCL für GPUs
Da heute eigentlich alle Prozessoren mehrere Cores beinhalten, sind zunehmend fast alle Programmierer
mit einer dieser Programmierformen konfrontiert.
Die Einführung erfolgt gemeinsam mit algorithmischen Techniken zur Parallelisierung
anhand von konkreten Anwendungsproblemen, die von Numerik bis Optimierung reichen.
Vorausgesetzt werden dabei nur Kenntnisse der C- bzw. C++-Programmierung sowie Grundkenntnisse zu Algorithmen.</objectives>
<content>Die Vorlesung wiederholt zunächst in kompakter Form Architektur und
Grundlagen der parallelen Programmierung für Multicore-CPUs und GPUs.
Dabei vertieft sie Kenntnisse über Gemeinsamkeiten und Unterschiede,
um die Programmierung von GPUs durch Übertragung paralleler Programme
für Multicores zu vereinfachen. Neben Techniken wie der Regularisierung
von Kontrollfluss und Speicherzugriffen werden auch algorithmische
Techniken anhand mehrerer Anwendungsdomänen gezeigt, die von der
klassischen Numerik bis zur Kryptografie reicht.

- Architektur moderner CPU-Kerne
  (Superskalarität, Hyperthreading, etc)
- Architektur moderner Mehrkern-Prozessoren
  (mehrere Cores, gemeinsame Caches, Speicherzugriff)
- Programmierung moderner Mehrkern-Prozessoren
- Fortgeschrittene Programmierung moderner Mehrkern-Prozessoren
  (Beispiele von Koordination durch critical sections, barriers, etc)

- Architektur moderner GPU-Architekturen
  (mehrere Multiprozessoren, Multiprozessoren als SIMD-Architekturen)
- Unterschiede zwischen GPUs und CPUs
  (SIMD vs MIMD, Datentransport, Zusammenarbeit CPU/GPU)
- Vorteile von GPUs gegenüber CPUs
  (Rechenleistung, explizite Nutzung lokaler Speicher, massive Parallelität)
- Grundlagen der GPU-Programmierung mit OpenCL
  (Beispiel-Programme, Zeitmessung, Relation Berechnung-Transport)
- Unterschiede zwischen CUDA und OpenCL
  (OpenCL allgemeiner, dafür aufwändiger, Code meistens weniger effizient)

- Performance-Abhängigkeit von Indizierung und Speichernutzung
  (Unterschiede je nach Dimensionszahl und -größen, Platzierung von Variablen)
- Regularisierung von Code zur Performance-Steigerung
  (Übertragung von Multicore-Code auf GPU, SIMDsierung, etc)

- Numerische Anwendungen
  (Parallele numerische Lösung von einfachen Differenzialgleichungen)
- Kombinatorische Anwendungen
  (Probleme in Graphen, Fokus auf Regularisierung)
- Kryptografische Anwendungen
  (Fokus auf Regularität sowie bitserieller Implementierung)
- Harte Probleme
  (NP-harte Probleme, Approximationen, Parallelisierung für GPU)</content>
<media>Cuda/OpenCL-Systeme mit NVidia-Tesla und -Kepler GPU-Architektur</media>
<literature>
</literature>
<offered>
<semshort>WS 2024/25</semshort>
<semshort>WS 2023/24</semshort>
<semshort>WS 2022/23</semshort>
<semshort>WS 2021/22</semshort>
<semshort>WS 2020/21</semshort>
<semshort>WS 2019/20</semshort>
</offered>
<moduldb-query>Sat Jul 18 20:14:06 CEST 2026, CKEY=pmug, BKEY=pim2, CID=[?], LANGUAGE=de, DATE=18.07.2026</moduldb-query>
</document>
