Literature by the same author
plus at Google Scholar

Bibliografische Daten exportieren
 

Implementierung numerischer Algorithmen auf CUDA–Systemen

Title data

Jahn, Thomas U.:
Implementierung numerischer Algorithmen auf CUDA–Systemen.
Bayreuth , 2010 . - 171 p.
(Diploma, 2010 , Universität Bayreuth, Fakultät für Mathematik, Physik und Informatik, Lehrstuhl Mathematik V)

Official URL: Volltext

Further data

Item Type: Master's, Magister, Diploma, or Admission thesis (Diploma)
Additional notes: Überarbeitete Version vom 22. Juli 2010.

Inhaltsverzeichnis:
Einleitung
I Programmieren mit CUDA
1 Technische Vorarbeit
1.1 Anforderungen an die Hardware
1.1.1 Unterstützte Grafikkarten
1.1.2 In dieser Arbeit verwendete PC–Systeme
1.2 Vorbereiten der Entwicklungsumgebung
1.2.1 Installation des CUDA–Treibers
1.2.2 Installation des CUDA–Toolkits

2 Die kleine Welt des nVidia Grafikchips
2.1 Was unterscheidet die GPU von der CPU?
2.2 Device Kernel: Das GPU-Programm
2.2.1 Ablauf einer Kernelausführung
2.2.2 Vorzeitiger Kernelabbruch (Execution-Timeout)
2.3 SIMD als essentielles Prinzip
2.4 Threads, Blöcke und Warps – So arbeitet die GPU
2.4.1 Nummerierung der Threads
2.4.2 Ausführung der Threadblöcke
2.5 Der Speicher auf der Grafikkarte
2.5.1 Device Memory
2.5.2 Shared Memory
2.5.3 Register
2.5.4 Constant Memory
2.5.5 Local Memory
2.6 Fähigkeiten der Grafikprozessoren
2.6.1 Compute Capabilities 1.0
2.6.2 Compute Capabilities 1.1
2.6.3 Compute Capabilities 1.2
2.6.4 Compute Capabilities 1.3

3 Die C–Schnittstelle zur GPU
3.1 Das erste Programm: "Hello, World" mal anders
3.1.1 Aufbau des Quellcodes
3.1.2 Kompilieren und ausführen
3.2 Erweiterter C–Befehlssatz im Device Code
3.2.1 Methoden– und Variablenkennzeichner
3.2.2 Vektor Variablentypen
3.2.3 Konstanten zur Kernellaufzeit
3.2.4 Threadsynchronisation
3.2.5 Intrinsic Functions
3.2.6 Atomic Functions
3.2.7 Abfrage der GPU–Uhr
3.3 Einführung in die CUDA Runtime Library
3.3.1 Fehlercodes der Runtime Library
3.3.2 Auswahl des GPU-Chips
3.3.3 Dynamische Verwaltung von Device Memory
3.4 Einschränkungen und Fehlerquellen
3.4.1 Functionpointer und Rekursion
3.4.2 Parallel oder nicht parallel?
3.4.3 Ausgabe von Zwischenergebnissen und Fehlersuche

4 Kerneloptimierung
4.1 Die richtige Strategie zur Speichernutzung
4.1.1 Paralleler Zugriff auf Device Memory
4.1.2 Shared Memory vs. Device Memory
4.1.3 Speicherbankkonflikte
4.2 Threadbranching
4.3 Maximierung der GPU–Ausnutzung
4.3.1 Die "Größe" des Kernels
4.3.2 Ermitteln der Anzahl aktiver Blöcke
4.3.3 Zusammenhang zwischen GPU–Ausnutzung und Kernellaufzeit
4.4 Die Wahl des richtigen Blockgitters

II Parabolische partielle Differentialgleichungen
5 Numerische Lösung parabolischer PDEs
5.1 Eine Problemstellung
5.2 Methode der finiten Differenzen
5.3 Stabilisierte explizite Runge-Kutta Methode
6 Implementierung des ROCK4–Algorithmus
6.1 Der Abhängigkeitsgraph als Hilfsmittel
6.2 Konzept zur Kernelgestaltung
6.2.1 Abhängigkeitsgraph eines Runge–Kutta–Schritts
6.2.2 Abbildung auf die CUDA–Hardware
6.3 Exemplarische Umsetzung
6.3.1 Speicherung der Konstanten
6.3.2 Abschätzung des Spektralradius
6.3.3 Die erste Auswertung der rechten Seite
6.3.4 Dreifachterm–Rekursion
6.3.5 Implementierung einer Stufe der Methode W
6.3.6 Das eingebettete Verfahren
6.3.7 Feinabstimmung der Kernelgrößen
6.4 Vergleiche mit der CPU
6.4.1 Vergleich der Laufzeiten
6.4.2 Numerische Effekte

III Modellprädiktive Regelung
7 Modellprädiktive Regelung
7.1 Das Konzept MPC
7.1.1 Berechnen der Feedbackkontrolle
7.1.2 Umsetzung in der Praxis
7.2 Abhängigkeitsgraph eines MPC-Schrittes
7.3 Geeignete Problemstellungen

8 MPC eines Objektschwarms
8.1 Aufstellung des Minimierungsproblems
8.2 Hardwarefreundliche Restriktionsfunktion
8.3 Kernelkonzept eines konkreten Beispiels
8.3.1 Die Zielfunktion eines Schwarmobjekts
8.3.2 Bestimmen der Restriktionsfunktion
8.3.3 Einteilung in Threadblöcke
8.4 Implementation der Device Kernels
8.4.1 Modelleigenschaften
8.4.2 Kernel zur Berechnung von Ziel– und Restriktionsfunktion
8.4.3 Kernel zur Berechnung der Gradienten
8.4.4 Feinabstimmung der Kernelgrößen
8.5 Resultate und Geschwindigkeitsvergleiche
8.5.1 Nettolaufzeiten der einzelnen Kernels
8.5.2 Laufzeiten des MPC–Algorithmus
8.5.3 Das Verhalten der Objekte

IV Abschließende Betrachtung
9 Fazit
9.1 Vorteile und Nachteile
9.2 Vorausblick
Keywords: numerische Algorithmen; numerische Lösung parabolischer Differentialgleichungen; modellprädiktive Regelung; Schwarmsteuerung; GPU-Programmierung; SIMD; CUDA-Architektur
Institutions of the University: Faculties
Faculties > Faculty of Mathematics, Physics und Computer Science
Faculties > Faculty of Mathematics, Physics und Computer Science > Department of Mathematics
Faculties > Faculty of Mathematics, Physics und Computer Science > Department of Mathematics > Chair Mathematics V (Applied Mathematics)
Faculties > Faculty of Mathematics, Physics und Computer Science > Department of Mathematics > Chair Mathematics V (Applied Mathematics) > Chair Mathematics V (Applied Mathematics) - Univ.-Prof. Dr. Lars Grüne
Profile Fields
Profile Fields > Advanced Fields
Profile Fields > Advanced Fields > Nonlinear Dynamics
Result of work at the UBT: Yes
DDC Subjects: 500 Science > 510 Mathematics
Date Deposited: 13 Apr 2015 10:05
Last Modified: 12 Aug 2016 07:08
URI: https://eref.uni-bayreuth.de/id/eprint/9947