• Keine Ergebnisse gefunden

Architektur und Programmierung von Grafik- und Koprozessoren

N/A
N/A
Protected

Academic year: 2022

Aktie "Architektur und Programmierung von Grafik- und Koprozessoren"

Copied!
17
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Architektur und Programmierung von Grafik- und Koprozessoren

General Purpose Programmierung auf Grafikprozessoren

Stefan Zellmann

Lehrstuhl f¨ur Informatik, Universit¨at zu K¨oln

SS2019

(2)

Lernziele

1. Charakteristiken von Grafikprozessoren - die Studierenden wenden das bisher erlernte Wissen ¨uber die Charakteristiken von Grafikprozessoren an und lernen, wie diese auf andere Probleme als auf Grafik abgebildet werden k¨onnen.

2. GPGPU Programmiermodell - die Studierenden verstehen das generelle GPGPU Programmiermodell und das dem Programmiermodell zugrunde liegende Speichermodell.

3. Arten von Nebenl¨aufigkeit- die Studierenden lernen CUDA kennen und k¨onnen einfache Programme damit entwickeln.

(3)

Stream Computing und GPGPU

(4)

GPGPU

I Derzeit Parallelismus Antwort auf Skalierungsprobleme im Rahmen von Moore’s Law (vgl. Vorlesungsteil 1).

I GPUs: hochparallele Many-Core Prozessoren.

I Andererseits: hohe Consumer Nachfrage nach GPUs, dadurch Preis f¨ur ChipHerstellung vergleichsweise niedrig.

I Chip Preis selber h¨angt von Nachfrage ab, z. B. EULAs von Nvidia, die Einsatz von Spielegrafikkarten in Rechenzentren f¨ur manche Anwendungen verbieten, erh¨ohte Nachfrage durch Crypto Currencies etc.

(5)

GPGPU

I Entwickler nutzen Grafikkarten f¨ur generelle Berechnungen wie Simulationen, Ray Tracing, DNA Sequencing, etc.

I Seit Mitte/Ende der 2000er Einzug von Grafikkarten und Koprozessoren in Rechenzentren.

I Grafikkarten: GPGPU Segment dominiert von Nvidia.

I wesentlich der Popularit¨at von Nvidia’s CUDA API geschuldet, waren erster Hersteller, der entwicklerfreundliche Toolchain ver¨offentlicht hat.

(6)

TOP500 Supercomputer Koprozessoren

“A total of 102 systems on the list are using accelerator / co-processor technology, up from 91 on the June 2017 list.86 of these use NVIDIA chips,12systems with Intel Xeon Phi technology (as Co-Processors), and 5 are using PEZY technology.

Two systems use a combination of Nvidia and Intel Xeon Phi accelerators / co-processors. An additional 14 Systems now use Xeon Phi as the main processing unit.”

(TOP500 November 2017 Highlights:

https://www.top500.org/lists/2017/11/highlights/)

(7)

TOP500 Supercomputer Koprozessoren

40.4%

11.5%

6.7%

5.8%

4.8%2.9%2.9%2.9%2.9%1.9%

17.3%

Nvidia Tesla P100 Nvidia Tesla K40 Nvidia Tesla K80 Nvidia Tesla K20x

Nvidia Tesla P100 NVLink Intel Xeon Phi 7120P Nvidia 2050

PEZY-SC2 Nvidia Tesla P40 Intel Xeon Phi 5110P Others (17.3%)

Abbildung:vgl. https://www.top500.org/statistics/list/,

Accelerator/Co-Processor Statistik f¨ur TOP500 Release November 2017.

(8)

Stream Computing

I Synonym: Stream Processing.

I Ahnlich wie SIMD, Datenstrom durchl¨¨ auft Instruktionssequenz (Compute Kernels)

I SIMD Prozessoren: Structure of Array Datenstr¨ome ⇒ Stream Processing Modell: FIFOs.

I Wesentlich entwickelt an Stanford University - StreamC, Imagine

(9)

Stream Computing

vector_mul kernel FIFO a

FIFO x

FIFO y

vector_add kernel

(10)

Stream Computing

I Stream Datenstrukturen mappen besonders gut f¨ur Datenstr¨ome, deren L¨ange a priori unbekannt ist.

I FIFOes k¨onnen immer Daten nachgeschoben werden.

I Kernels ¨ahnlich wie Pipeline Stages, die asynchronablaufen und dedizierte Aufgabe durchf¨uhren.

I Spezielle Algorithmen, designed um mit großen Datenmengen umzugehen.

(11)

Nvidia CUDA

(12)

CUDA ¨ Uberblick

I CUDA: C++ Spracherweiterung von Nvidia f¨ur GPGPU.

I Bildet Stream Processing Modell auf GPU Architektur (vgl.

Vorlesungsteil 3) ab.

I Kernels f¨ur Rechenbefehle, FIFOs f¨ur Host Interface.

I Single-Source Paradigma: geteilte CPU und GPU Code-Basis, Funktionen werden annotiertf¨ur CPU ( host ), GPU ( device ) oder beide ( host device ) kompiliert.

I Verschiedene Compiler f¨ur CPU Code (gew¨ohnliche CPU Toolchain) und GPU Code (CLANG basiert, spezielle Kompilation in Nvidias PTX Instruction Set Architecture).

(13)

CUDA ¨ Uberblick

I Host Code: alloziert und verwaltet Ressourcen, implementiert Schnittstelle zur Anwendungslogik, ruft Device Code auf.

I Device Code: implementiert Logik auf GPU.

I F¨ur Host Code stehen APIs zur Verf¨ugung.

I Device Code wird in Subset von C++ mit wenigen Spracherweiterungen geschrieben.

I Device Code wird mittels Kernels organisiert und von vielen Threads gleichzeitig ausgef¨uhrt.

(14)

CUDA ¨ Uberblick

I Zwei APIs:

I Driver API: mehr Kontrolle, wie parallele GPU Funktion (Kernel,Compute Kernel) ausgef¨uhrt wird. Kernel wird vom Programmierer in Intermedi¨ar-Code (PTX) ¨ubersetzt, dieser wird explizit aufgerufen.

I Runtime API: gebr¨auchlicher. Ausf¨uhrung von GPU Funktionen als Teil der Programmiersprache.

I F¨ur die meisten Anwendungen kein Unterschied bzgl.

Performance.

I Wir betrachten nur das gebr¨auchlichere Runtime API.

I Dokumentation: “CUDA Toolkit Programming Guide”.

I Inhalte dieses Vorlesungsteils k¨onnen im Programming Guide vertieft werden.

(15)

CUDA-f¨ ahige Devices

I CUDA wurde mit G80 Chipsatz eingef¨uhrt (2009, GeForce GTX 8800).

I Aktuelle CUDA Versionen unterst¨utzen G80 nicht mehr.

I Devices werden aufgrund von Compute Capability kategorisiert (h¨oher ist besser).

I Niedrigste unterst¨utzte Compute Capability ist 2.0 (Fermi Generation: GeForce GTX 480 & GTX 580 von 2010/11).

I GTX 1070, GTX 1080: Compute Capability 6.1.

I Titan V: Compute Capability 7.0.

I Manche Features sind an Compute Capability gekoppelt.

(16)

GPU Ausf¨ uhrungsmodell

Kernel 0 Kernel 1 Kernel 2

DMA Memory Transfers

CPU GPU CPU GPU CPU GPU CPU

Execution

Abbildung:vgl. CUDA Toolkit Programming Guide.

Sequentielle Programmausf¨uhrung auf CPU (“Host”), parallele Programmausf¨uhrung auf GPU (“Device”), bidirektionaler Datenaustausch ¨uber DMA.

(17)

GPU Many-Core Skalierung

Thread-Blocks

I CUDA bildet parallele Programme aufuniforme Gitter ab.

I 1D: Wir sortieren N Zahlen. Dazu unterteilen wir die N Zahlen inBl¨ocke (Streifen) der Gr¨oße B ⇒ Gittergr¨oße:

G =dNBeBl¨ocke.

I 2D: Wir rendern ein Bild mitW ×H Pixeln. Dieses unterteilen wir in Bl¨ocke (Kacheln) der Gr¨oßeBx ×By Threads ⇒ Gittergr¨oße:Gx =dWB

xe,Gy =dBH

ye.

I 3D: Wir f¨uhren eine Berechnung auf einem CT Scan durch, dieser besteht aus Z Schichten mit Aufl¨osungX ×Y. Wir unterteilen in Bl¨ocke der Gr¨oße Bx ×By ×Bz und erhalten Gitter der Gr¨oße Gx =dBX

xe,Gy =dBY

ye,Gz =dBZ

ze.

Referenzen

ÄHNLICHE DOKUMENTE

“Sampling” bestimmt. Dies ist eine in den Prozessor eingebaute Funktionalit¨ at, die, falls aktiviert, die Instruktionspipeline zu definierten Zeitpunkten anh¨ alt und

C++ spezifiziert keine Garbage Collection (der Standard schließt sie nicht explizit aus, aber es gibt keine Implementierungen, die mir bekannt sind). Daher m¨ ussen alle Ressourcen,

I Desktop GPUs implementieren traditionell Immediate-Mode Rendering: Verarbeitung orientiert sich an Reihenfolge, in der Dreiecke submittiert wurden (nicht zu verwechseln

I Vor und nach Skalarprodukt m¨ ussen Threads synchronisiert werden, damit nicht schon andere Threads aus Warp anderen Block in Shared Memory laden... I Seit Nvidia Kepler

Die Template Klasse sync queue in der beigef¨ ugten Datei queue.cpp wird von mehreren Threads gleichzeitig als Schlange zum Austauschen von Nachrichten genutzt. Intern verwaltet

(2) Die Bin¨ arrepr¨ asentation der sich ergebenden nat¨ urlichen Zahl k setzt sich immer abwechselnd aus den Bin¨ arziffern der Zahlpaare (i, j) zusammen. Tragen Sie das Ergebnis

Trifft man die vereinfachende Annahme, dass geometrische, aus Dreiecken zusammengesetzte Objekte geschlossen sind und immer nur von außen betrachtet werden, kann man vor dem

Der Ray Tracer geht im Weiteren davon aus, dass totale interne Reflektion aufgetreten ist, wenn refract() einen 0-Vektor zurückgegeben hat und ruft in dem Fall die Funktion