Parallelverarbeitung ist ein großes und wichtiges Thema in der Informatik sowie in deren Randgebiete. Schon in den frühen 70er Jahren gab es neben den klassischen CPU auch parallele Rechner.
Einer der Hauptgründe für das Parallelisieren von Programmen ist deren schnellere Ausführung. Hierfür dienen nicht nur die klassischen CPUs von INTEL und AMD sondern auch HPC Karten, die dabei auch eine immer größere Rolle spielen. Einer der bekanntesten Hersteller ist Nvidia aber auch INTEL und AMD haben solche Karten auf dem Markt. Für den Einsatz der Karten kommen spezielle Schnittstellen zum Einsatz, eine davon ist Nvidia CUDA.
Das Ziel der Seminararbeit ist, einen ersten Überblick in die CUDA C Programmierung zu geben.
Im Rahmen dieser Arbeit habe ich mich größtenteils auf die Dokumentation von Nvidia gestützt. Sie gibt einen vollständigen Überblick des Funktionenumfangs und eine kurze Erklärung. Für den genaueren Zusammenhang habe ich vor dem Schreiben der Arbeit ein Buch durchgearbeitet.
Die Seminararbeit ist in vier Kapitel untergliedert. Im zweiten Kapitel wird auf die Theorie und den Aufbau einer GPU eingegangen. Anschließend werden einige Hauptfunktionen von CUDA vorgestellt und zum Schluss kommt das Fazit.
Inhaltsverzeichnis
1 Einleitung
2 Einführung CUDA
2.1 Historische Entwicklung
2.2 Unterscheidung zwischen GPU und CPU
2.2.1 Prinzipieller Aufbau einer GPU
2.2.2 Single-Instruction, Multiple-Thread Modell
2.3 Compute Capaility
2.4 Arten von Speicher
2.5 Kernel, Threads, Blöcke und Grids
3 Programmierung
3.1 CUDA-API
3.2 Funktionen Deklaration
3.3 Ausführen eines Kernel
3.4 Nummerierung von Threads
3.5 Speicherverwaltung
4 Fazit
Zielsetzung & Themen
Diese Seminararbeit hat zum Ziel, einen fundierten Einblick in die CUDA C-Programmierung zu geben, um die Nutzung von Grafikprozessoren für parallele Berechnungen zu erläutern und die theoretischen sowie praktischen Grundlagen für den Einstieg in diese Technologie zu vermitteln.
- Grundlegende Unterschiede zwischen CPU- und GPU-Architekturen.
- Theorie des Single-Instruction, Multiple-Thread (SIMT) Modells.
- Strukturierung von CUDA-Programmen durch Kernels, Threads, Blöcke und Grids.
- Methoden der Speicherverwaltung auf der GPU-Hardware.
- Erweiterungen der Programmiersprache C für die CUDA-API.
Auszug aus dem Buch
2.2.1 Prinzipieller Aufbau einer GPU
Die CUDA GPU ist aus mehreren unabhängigen Streaming Multiprozessor (SM) zusammengesetzt (Abb. 1.2). Je nach der Compute Capability (Kapitel 1.3) nennen sie sich unterschiedlich, z.B. SMX bei der Kepler und SMM bei der Maxwell Architektur. Ein Einzelner Streaming Multiprozessor setzt sich wiederrum aus einer Anzahl von Streaming Prozessor (SP) zusammen (Abb. 1.3), er wird auch als CUDA-Core bzw. nur als Core bezeichnet. Die Anzahl und ihre verschiedenen Eigenen hängen auch von der Compute Capability ab.
Im Weiteren besitzt eine CUDA GPU ihren eigenen Arbeitsspeicher (Global Memory, Abschnitt 1.4) und wird über den PCI-Express-Bus an das System angeschlossen. Nachfolgend sind zwei Bilder der Kepler Architektur zur Verdeutlichung.
Zusammenfassung der Kapitel
1 Einleitung: Die Einleitung motiviert das Thema der Parallelverarbeitung und definiert das Ziel, einen Überblick über die CUDA C Programmierung unter Nutzung von Nvidia-Hardware zu geben.
2 Einführung CUDA: Dieses Kapitel behandelt die geschichtliche Entwicklung von CUDA, grenzt die Architektur von GPUs gegenüber klassischen CPUs ab und erläutert wichtige Konzepte wie das SIMT-Modell, die Compute Capability sowie die verschiedenen Speicherarten.
3 Programmierung: Der Hauptteil erläutert die praktische Implementierung mit der CUDA-API, erklärt die Deklaration von Funktionen, die Ausführung von Kernels, die Indizierung von Threads sowie die Verwaltung von Speicherressourcen.
4 Fazit: Das Fazit fasst zusammen, dass CUDA ein mächtiges Werkzeug für parallele Aufgaben darstellt, weist jedoch auf die notwendige Sorgfalt bei der Speicher- und Thread-Verwaltung sowie die hardwareseitige Bindung an Nvidia hin.
Schlüsselwörter
CUDA, GPU, CPU, Parallelverarbeitung, Kernel, SIMT, Thread, Block, Grid, Compute Capability, Speicherverwaltung, Global Memory, Shared Memory, Register, Programmierung
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit beschäftigt sich mit den Grundlagen der Programmierung von Nvidia Grafikprozessoren mittels der CUDA-Technologie.
Was sind die zentralen Themenfelder der Arbeit?
Die zentralen Themen umfassen die GPU-Architektur, das Programmiermodell für parallele Berechnungen, die Speicherhierarchie von Grafikkarten und die syntaktische Erweiterung von C für CUDA.
Was ist das primäre Ziel der Arbeit?
Das Ziel ist es, dem Leser einen ersten, strukturierten Überblick in die CUDA C Programmierung zu ermöglichen.
Welche wissenschaftliche Methode wurde verwendet?
Die Arbeit basiert auf einer tiefgehenden Analyse der offiziellen Nvidia-Dokumentation sowie begleitender Fachliteratur zur Anwendungsentwicklung.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil konzentriert sich auf die praktische Programmierung, insbesondere die API-Nutzung, die Funktionsdeklarationen für Host und Device, die Thread-Hierarchie und die effiziente Speicherverwaltung.
Welche Schlüsselwörter charakterisieren diese Arbeit am besten?
Die Arbeit ist primär durch Begriffe wie CUDA, GPU, Parallelverarbeitung, Kernel, Threads und Speicherverwaltung definiert.
Was unterscheidet das SIMT-Modell von klassischen Ansätzen?
Beim SIMT-Modell, wie es CUDA nutzt, werden Rechenoperationen nicht nur auf Daten, sondern explizit auf eine Vielzahl von parallelen Threads angewendet.
Warum ist die Unterscheidung der Speicherarten in CUDA so wichtig?
Die Wahl des richtigen Speichers (z.B. Register vs. Global Memory) ist für die Performance entscheidend, da sie sich in Zugriffshäufigkeit, Geschwindigkeit und Sichtbarkeit (Gültigkeitsbereich) für die Threads stark unterscheiden.
- Quote paper
- Edem Kiessig (Author), 2015, Einführung in die "CUDA" (Compute Unified Device Architecture) Programmierung. Parallelverarbeitung von Programmen in der Informatik, Munich, GRIN Verlag, https://www.grin.com/document/374980