2.6 Graphikprozessoren

Ähnliche Dokumente
2.6 Graphikprozessoren

Rechnerarchitektur (RA)

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern

Compute Unified Device Architecture CUDA

Grafikkarten-Architektur

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm. Einführung CUDA. Ralf Seidler. Friedrich-Alexander-Universität Erlangen-Nürnberg

CUDA. Axel Jena, Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Axel Jena, Jürgen Pröll 1

GPGPU-Programmierung

Masterpraktikum Scientific Computing

Grundlagen von CUDA, Sprachtypische Elemente

Masterpraktikum Scientific Computing

GPGPU-Programmierung

Multicore-Architekturen

GPGPU WITH OPENCL. Praktikum Parallele Rechnerarchitekturen, 2015w Franz Richter-Gottfried

Systeme 1: Architektur

General Purpose Computation on GPUs

Paralleler Cuckoo-Filter. Seminar: Implementierungstechniken für Hauptspeicherdatenbanksysteme Jeremias Neth München, 21.

Beispielvortrag: HPCG auf Intel Haswell-EP

Gliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

Eine kurze Geschichte der Grafikkarten

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Programmierung von Graphikkarten

Software Engineering für moderne parallele Plattformen 9. GPGPUs: Grafikkarten als Parallelrechner

High Performance Embedded Processors

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

PGI Accelerator Model

Optimierungen der Lattice Boltzmann Methode auf x86-64 basierten Architekturen

Angewandte Mathematik und Programmierung

Rheinisch-Westfälische Technische Hochschule Aachen. Seminararbeit

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung


GPGPU mit NVIDIA CUDA

Memory Models Frederik Zipp

Volumenrendering mit CUDA

Übung 3: VHDL Darstellungen (Blockdiagramme)

Universität Karlsruhe (TH)

Sprungbefehle und Kontroll-Strukturen

Numerik und Rechnen. Martin Heide & Dominik Holler. 12. Juni 2006

OpenCL. OpenCL. Boris Totev, Cornelius Knap

GPGPU-Architekturen CUDA Programmiermodell Beispielprogramm Organiosatorisches. Tutorial CUDA. Ralf Seidler

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12

Neues vom STRIP Forth-Prozessor

Stream Processing und High- Level GPGPU Sprachen

Computergrundlagen Moderne Rechnerarchitekturen

Informatik I (D-ITET)

FPGA Beschleuniger. Your Name. Armin Jeyrani Mamegani Your Organization (Line #2)

DIGITALE SCHALTUNGEN II

Technische Grundlagen der Informatik 2 SS Einleitung. R. Hoffmann FG Rechnerarchitektur Technische Universität Darmstadt E-1

Cell and Larrabee Microarchitecture

Seminar Multicore-Programmierung

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen

CUDA. Philip Höhlein, Nils Werner Supervision: R. Membarth, P. Kutzer, F. Hannig. Hardware-Software-Co-Design Universität Erlangen-Nürnberg

Multi-Core Architectures and Programming. Bilateral Grid Filter

SS08, LS12, Friedrich-Alexander-Universität Erlangen Florian Hänel, Frederic Pollmann HS Multicore Architectures and Programming GPU EVOLUTION

Programmierbeispiele und Implementierung. Name: Michel Steuwer

2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"

Spezialprozessoren zur Übernahme Grafik-spezifischer Aufgaben, vorrangig der Bildschirmausgabe

Ferienakademie Erik Muttersbach

Computergrundlagen Moderne Rechnerarchitekturen

Übung Praktische Informatik II

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Schriftliche Prüfung

Kontrollfluss. man Verzweigungen und Sprünge. o bisher linear (von oben nach unten) o Für interessante Programme braucht

Machine Learning Hardware

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Seminar: Multi-Core Architectures and Programming

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Die Sandy-Bridge Architektur

1 Einleitung. 2 Parallelisierbarkeit von. Architektur

Objektorientierte Programmierung und Modellierung

> High-Level Programmierung heterogener paralleler Systeme

Untersuchung und Vorstellung moderner Grafikchiparchitekturen

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Parallele Programmierung mit GPUs

C-to-CUDA-Compiler. Johannes Kölsch. October 29, 2012

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Assembler (NASM) Crashkurs von Sönke Schmidt

Grundlagen der Rechnerarchitektur. MIPS Assembler

Architektur von Parallelrechnern 50

Vorkurs Informatik WiSe 16/17

Wie groß ist die Page Table?

Eine Einführung in die Architektur moderner Graphikprozessoren

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Martin Stiller, Fakultät Informatik, Institut für Technische Informatik. LLVA: Eine virtuelle Befehlssatzarchitektur

Informatik I (D-MAVT)

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Transkript:

12 2.6 Graphikprozessoren Peter Marwedel Informatik 12 TU Dortmund 2012/04/16 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt.

3D Grafikpipeline (OpenGL) Erzeugung von Bildern üblicherweise Fließbandartig organisiert. Beispiel: OpenGL Siehe Vorlesungen des LS7 zu den einzelnen Graphikoperationen M. Wawro, Digital Medics, 2003-2 -

Struktur früher Graphikbeschleuniger [Müller-Schloer, Schmitter: RISC-Workstation- Architekturen, Springer- Verlag,1991] Neuere Graphikbeschleuniger stärker programmierbar - 3 -

General Purpose GPU (GPGPU) Programming Kann die Programmierbarkeit von GPUs genutzt werden, um auch außerhalb der Grafikprogrammierung Anwendungen zu beschleunigen? Prinzipien (NVIDIA): Entwicklung eines (portablen) C-Dialects für GPUs, CUDA (Compute Unified Device Architecture) Einheit der Parallelverarbeitung ist ein thread Gruppen von 32 threads heißen thread block (warp) Thread blocks werden auf multithreaded SIMD Prozessoren ausgeführt - 4 -

Konventionen Für Funktionen: _device_, _global_: GPU, _host_: CPU Für Variablen: _device_, _global_: GPU-Speicher zugeordnet, von allen SIMD-Prozessoren zu nutzen. Erweiterter Funktionsaufruf name<<<dimgrid,dimblock>>>( Parameter-Liste ) mit dimgrid = Elemente im Grid (in Blöcken) und dimblock = Elemente im Block (in threads) Spezielle Variablennamen: blockidx = aktueller Block threadidx= aktueller thread blockdim= Anzahl threads im Block - 5 -

DAXPY in C und CUDA //Invoke DAXPY daxpy(n, 2.0, x, y) //DAXPY in C void daxpy(int n, double a, double*x,double *y) { for (int i=0;i<n;++i) y[i]=a*x[i]+y[i]; } //Invoke DAXPY with 256 threads per block _host_ int nblocks = (n+ 255)/256; daxpy<<<nblocks, 256>>>(n, 2.0, x, y) //DAXPY in CUDA _device_ void daxpy(int n, double a, double *x, double*y) { int i = blockidx*blockdim.x + threadidx.x; if (i<n) y[i] = a* x[i] +y[i]; } Keine Abhängigkeit zwischen Schleifeniterationen (no loop-carried dependences) Über thread-grenzen hinaus benachbarte Speicheradressen erforderlich, um gute Speicherperformanz zu erreichen - 6 -

Vergleich von Bezeichnungen Treffende Bezeichn. Außerhalb GPUs CUDA/NVIDIA Bedeutung Vectorizable Loop Vectorizable Loop Grid Vektorisierbare Schleife Body of vectorizable loop Body of (strip-mined) vectorizable loop Thread block Sequence of SIMD Lane Operations One iteration of a loop CUDA Thread Thread of SIMD intructions Thread of vector instructions Warp 32 threads SIMD instruction Vector instruction PTX instruction PTX Hardwarebef. Multithreaded SIMD processor (Multithreaded) vector processor Streaming multiprocessor Thread block scheduler Scalar processor Giga Thread Engine SIMD thread scheduler Thread scheduler in multithreaded CPU WARP scheduler SIMD Lane Vector Lane Thread processor - 7 -

Beispiel Multiplikation zweier Vektoren der Länge 8192 Code, der alle Elemente erfasst, heißt grid SIMD-Befehl erfasst 32 Elemente (threads) Ein thread block umfasst 512 Elemente Das Grid enthält mithin 16 Blöcke Durch den thread block scheduler wird jedem Block ein multithreaded SIMD Prozessor zugewiesen Fermi-GPUs haben bis zu 16 multithreaded SIMD Prozessoren - 8 -

Beispiel: Abbildung einer Vektormultiplikation Grid Thread Block 0. Thread Block 15 SIMD Thread 0 SIMD Thread 15 SIMD Thread 0 SIMD Thread 15 A[ 0] = B[ 0] * C[ 0] A[ 1] = B[ 1] * C[ 1].. A[ 31] = B[ 31] * C[ 31] A[ 480] = B[ 480] * C[ 480] A[ 481] = B[ 481] * C[ 481].. A[ 511] = B[ 511] * C[ 511] A[7680] = B[7680] * C[7680] A[7681] = B[7681] * C[7681].. A[7711] = B[7711] * C[7711] A[8160] = B[8160] * C[8160] A[8161] = B[8161] * C[8161].. A[8191] = B[8191] * C[8191] Verteilung einer Multiplikation von Vektoren mit 8192 Elementen. Der thread block scheduler weist thread blocks multithreaded SIMD Prozessoren zu. Der Hardware thread scheduler wählt aus, welcher thread als nächstes ausgeführt wird. Max. 16 threads/block bei Tesla und max. 32 bei Fermi-Prozessoren - 9 -

Vereinfachtes Block Diagram eines Multithreaded SIMD-Prozessors thread scheduling kann unter 48 unabhängigen threads einen ausführbereiten auswählen Max. 16 threads für Tesla- und 32 threads für Fermi- Prozessoren Effiziente Speicherzugriffe entstehen erst durch Zusammenfassen von benachbarten Speicherzugriffen - 10 -

Layout der Fermi GTX 480 GPU 16 Multithreaded SIMD-Prozessoren GDDR5 port PCI Express 2.0 x 16 GDDR5 ports Thread block scheduler GDDR5 port - 11 -

Fermi Multithreaded SIMD Processor - 12 -

Auswahl von ausgeführten threads durch den SIMD thread scheduler Beispiel einer Ausführung von threads: Annahme: durch scheduling innerhalb der multithreaded SIMD-Prozessoren lässt sich die Speicherlatenzzeit verstecken, ausreichend viele vorhandene threads vorausgesetzt. - 13 -

NVIDIA PTX GPU Befehle, Auswahl (1) Gruppe Arithmetik Spezialbefehle Logik Befehl Bedeutung type {.s32,.u32,.f32,.s64,.u64,.f64} add.type d,a,b d=a+b mad.type d,a,b,c d=a*b+c min.type d,a,b d=(a<b)?a:b selp.type d,a,b d=p? a:b type {.f32,.f64 (teilweise)} sqrt.type d,a d=sqrt(a) rsqrt.type d,a d=1/sqrt(a) sin.type d,a d=sin(a) lg2.type d,a d=log 2 (a) ex2 d,a d=2^a type={.pred,.b32,.b64} and.type d= a b or.type d= a b shl.type d=a <<b Kommentar Datentypen select with predicate Datentypen Datentypen - 14 -

NVIDIA PTX GPU Befehle, Auswahl (2) Gruppe Speicher Kontrolle Befehl Bedeutung Kommentar space {.global,.shared,.local,.const} Datentypen ld.space.type d[a+offset] d=mem[a+offset] st.space.type d[a+offset] d=mem[a+offset] tex.nd.dtyp,btyp d=text2d(a,b) atom.spc.op.type d=mem[a], Mem[a]=d op b Atomare Operation branch t if (p) goto t Bedingter Sprung call Funktionsaufruf ret Rückkehr vom Funktionsaufruf bar.sync Warte auf threads Barrier Synchronisation exit d=2^a Beende thread PTX=Parallel Thread Execution PTX-ISA ist eine Abstraktion des Hardwarebefehlssatzes Übersetzung in Hardware-ISA erfolgt durch Software PTX benutzt virtuelle Register - 15 -

Beispiel: DAXPY in PTX shl.s32 R8, blockidx, 9 ; Thread Block ID * Block size (512 or 2 9 ) add.s32 R8, R8, threadidx ; R8 = i = my CUDA thread ID ld.global.f64 RD0, [X+R8] ; RD0 = X[i] ld.global.f64 RD2, [Y+R8] ; RD2 = Y[i] mul.f64 R0D, RD0, RD4 ; Product in RD0 = RD0 * RD4 (scalar a) add.f64 R0D, RD0, RD2 ; Sum in RD0 = RD0 + RD2 (Y[i]) st.global.f64 [Y+R8], RD0 ; Y[i] = sum (X[i]*a + Y[i]) - 16 -

Realisierung von IF-Statements GPUs benutzen Masken zur Realisierung von IF- Statements. Masken: Einträge enthalten Masken für jede SIMD lane Legen fest, welche threads Ergebnisse abspeichern (alle threads werden ausgeführt) Pro thread-lane 1-bit predicate register, durch Programmierer angegeben. - 17 -

Beispiel if (X[i]!= 0) X[i] = X[i] Y[i]; else X[i] = Z[i]; ld.global.f64 RD0, [X+R8] ; RD0 = X[i] setp.neq.s32 P1, RD0, #0 ; P1 is predicate register 1 @!P1, bra ELSE1, *Push ; Push old mask, set new mask bits ; if P1 false, go to ELSE1 ld.global.f64 RD2, [Y+R8] ; RD2 = Y[i] sub.f64 RD0, RD0, RD2 ; Difference in RD0 st.global.f64 [X+R8], RD0 ; X[i] = RD0 @P1, bra ENDIF1, *Comp ; complement mask bits ; if P1 true, go to ENDIF1 ELSE1: ld.global.f64 RD0, [Z+R8] ; RD0 = Z[i] st.global.f64 [X+R8], RD0 ; X[i] = RD0 ENDIF1: <next instruction>, *Pop ; pop to restore old mask - 18 -

NVIDIA GPU Speicherstrukturen 1. Private memory: privater Abschnitt im off-chip-dram- Speicher. Für: Stack ausgelagerte Register private Variablen 2. Local Memory: von threads innerhalb eines multithreaded SIMD-Prozessors gemeinsam nutzbarer Speicher 3. GPU-Memory: Off-Chip- Speicher, der von allen thread- Blöcken und auch von der CPU genutzt werden kann. - 19 -

Vergleich von Bezeichnungen (2) Treffende Bezeichnung Außerhalb GPUs CUDA/NVIDIA Bedeutung GPU memory Main memory Global memory (Teilweise o. Cache) Private memory Local memory CPU memory SIMD Lane registers Thread or stack local storage (OS) Local memory Vector lane registers Local memory Shared Memory Texture memory Gecachter CPU- Hauptspeicher Durch CPU zum GPU-Speicher kopierbar, durch GPU zum CPU-Speicher kopierbar. Thread processor registers Im Hauptspeicher (!), nur innerhalb eines threads nutzbar Schneller lokaler Speicher für einen SIMD-Prozessor, Zur Kommunikation innerhalb von blocks - 20 -

Ähnlichkeiten zwischen Vektor- und Grafikprozessoren 8-16 SIMD Lanes - 21 -

NVIDIA GPU Architektur Ähnlichkeiten zu Vektormaschinen: Beide sind geeignet für datenparallele Anwendungen Beide enthalten gather/scatter-unterstützung Beide enthalten Maskenregister Beide haben große Registerfiles Unterschiede: Kein Skalarprozessor bei GPUs GPU benutzt Multithreading zum Verstecken von Speicherlatenz GPU hat viele funktionelle Einheiten, statt wenigen mit vielen Fließbandstufen - 22 -

Vergleich Grafikprozessor/CPU mit dem Roofline-Modell To hit the highest computation rate on the Core i7 you need to use all 4 cores and SSE instructions with an equal number of multiplies and adds. For the GTX 280, you need to use fused multiply-add instructions on all multithreaded SIMD processors. The DP FP performance ceiling is also in the bottom row to give perspective. - 23 -

Zusammenfassung Stärkere Programmierbarkeit von Grafikprozessoren erlaubt deren Einsatz für allgemeines Rechnen, v.a. für Vektor-orientiertes Rechnen NVIDIA setzt mit Grafikprozessoren und CUDA Standards. Einheit der Parallelausführung ist ein thread threads werden in Blöcke zusammengefasst Die Blöcke machen eine parallelisierbare Schleife aus thread Blöcke werden den multithreaded SIMD- Prozessoren zugewiesen Innerhalb der Prozessoren werden die auszuführenden threads dynamisch per Hardware ausgewählt Lokalität zwischen threads wg. Speicherzugriffen wichtig - 24 -