general purpose computation on graphics processing units (gpgpu)

39
GPGPU - Skiseminar Parallel Programming and Parallel Algorithms Alexander Zibula - 13.01.2010 Mit Nvidia CUDA General Purpose Computation on Graphics Processing Units (GPGPU)

Upload: harriet-wiley

Post on 02-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

General Purpose Computation on Graphics Processing Units (GPGPU). Mit Nvidia CUDA. Agenda. Motivation Grundlagen GPGPU und GPU Computing Anwendungen Fazit und Ausblick. Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick. Motivation. GPGPU - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: General Purpose Computation on Graphics Processing Units (GPGPU)

GPGPU - Skiseminar Parallel Programming and Parallel Algorithms

Alexander Zibula - 13.01.2010

Mit Nvidia CUDA

General Purpose Computation on Graphics Processing Units (GPGPU)

Page 2: General Purpose Computation on Graphics Processing Units (GPGPU)

2

Motivation

Grundlagen

GPGPU und GPU Computing

Anwendungen

Fazit und Ausblick

Agenda

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 3: General Purpose Computation on Graphics Processing Units (GPGPU)

3

Motivation

GPGPUGeneral Purpose Computation on Graphics Processing Units

Verwendung von Grafikkarten für allgemeine Berechnungen

Warum?GPU Entwicklung

Performance

Programmierbarkeit

Zahlreiche Anwendungen

[NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 4: General Purpose Computation on Graphics Processing Units (GPGPU)

4

Motivation

GrundlagenGrafik Pipeline

Grafik APIs

Grafik Shader

Grafik Hardware

GPGPU und GPU Computing

Anwendungen

Fazit und Ausblick

Agenda

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 5: General Purpose Computation on Graphics Processing Units (GPGPU)

5

Grafik Pipeline

Grafik PipelineModell der einzelnen Schritte zum „Rendern” einer 3D-Szene (Bildsynthese)

Anwendung Geometrie Rasterung Bildspeicher Bildschirm

Transformation Beleuchtung Projektion Ausschnitt

[Vgl. BB03, XP07]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 6: General Purpose Computation on Graphics Processing Units (GPGPU)

6

Grafik APIs

Grafik APIs (Programmierschnittstellen)Abstraktion von Hardware und Treiber

Direct3DProprietär

Bestandteil der Microsoft DirectX API Sammlung

OpenGLPlattformunabhängig

Koordiniert durch die Khronos Group

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 7: General Purpose Computation on Graphics Processing Units (GPGPU)

7

Grafik Shader

Grafik ShaderKleine Programme zur Flexibilisierung der Grafik Pipeline

Programmierbar in: Assembler, HLSL, Cg oder GLSL

Drei TypenVertex Shader

Geometry Shader

Pixel Shader

Unified ShadersHarmonisierung der drei Typen

Discrete Shader Design Unified Shader Design

Shader A

Shader B

Shader C

Shader Core

[Vgl. NVI06]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 8: General Purpose Computation on Graphics Processing Units (GPGPU)

8

Grafik Shader (2)

Unified ShadersPerformance Verbesserung durch höhere, gleichmäßige Auslastung

[Vgl. NVI06]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 9: General Purpose Computation on Graphics Processing Units (GPGPU)

9

Grafik Hardware

Grafikkarten im SystemDedizierte Grafikkarten vs. integrierte Grafik

Unterschiede: Speicher, Leistung, Preis

SystemanbindungPCI Express

Bandbreite: 500 MB/s pro lane

Für Grafikkarten meist: PCIe v2 x16 8 GB/s Häufiger Flaschenhals für GPGPU Anwendungen

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 10: General Purpose Computation on Graphics Processing Units (GPGPU)

10

Agenda

Motivation

Grundlagen

GPGPU und GPU ComputingStream Processing

Traditionelles GPGPU

GPU Computing mit CUDA

Anwendungen

Fazit und Ausblick

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 11: General Purpose Computation on Graphics Processing Units (GPGPU)

11

Stream Processing

Stream ProcessingEinfaches paralleles Programmiermodell

Kernel (Instruktionen) angewendet auf Stream (Datenstrom)

Je nach Kernel: SIMD oder MIMD Klassifikation

Keine explizite Thread Synchronisation und Kommunikation

Geeignet beiHoher arithmetischer Komplexität

Datenparallelität

Datenlokalität

RestriktionenDatenabhängigkeiten

Rekursion

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 12: General Purpose Computation on Graphics Processing Units (GPGPU)

12

Stream Processing (2)

Einfluss auf Hardware-ArchitekturenReduktion von Control & Cache möglich

Höherer Anteil Recheneinheiten (ALUs)

[Vgl. NVI09d]CPU GPU

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 13: General Purpose Computation on Graphics Processing Units (GPGPU)

13

Traditionelles GPGPU

Direkte Nutzung der Grafik APIs und Programmiersprachen

NachteileHohe Komplexität

Improvisiertes Programmiermodell

Mangelnde Präzision (Ungenaue Datentypen)

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 14: General Purpose Computation on Graphics Processing Units (GPGPU)

14

GPU Computing mit CUDA

Nvidia CUDA (Compute Unified Device Architecture)Software u. Hardwarearchitektur für parallele Programmierung

Verbesserung gegenüber GPGPUVereinfachung

Performance

Verbreitung

Heterogene AusführungParalleler Code GPU

Sequentieller Code CPU

GPGPU GPU Computing

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 15: General Purpose Computation on Graphics Processing Units (GPGPU)

15

CUDA Übersicht

[Vgl. NVI09a]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 16: General Purpose Computation on Graphics Processing Units (GPGPU)

16

CUDA Komponenten

Weitere CUDA KomponentenCompiler

FunktionsbibliothekenCUBLAS für lineare Algebra (Basic Linear Algebra Subprograms)

CUFFT für Fourier-Transformation (FFT)

Debugger cudagdb

Profiler cudaprof zur Optimierung

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 17: General Purpose Computation on Graphics Processing Units (GPGPU)

17

CUDA Programmiermodell

Thread-HierachieGrids

Thread blocks

Threads

Thread IdentifizierungImplizit definierte Variablen:

threadIdx.x .y .zblockIdx.x .y .z

Kernel AufrufDim3 dimGrid(3, 2);Dim3 dimBlock(4, 3);kernel<<<dimGrid, dimBlock>>>(parameter); [Vgl. NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 18: General Purpose Computation on Graphics Processing Units (GPGPU)

18

Code Beispiel

Beispiel: SAXPY (Scalar Alpha X Plus Y)Skalare Multiplikation und Vektoraddition

Serielle Lösung in C mittels for-Schleife:

void saxpy_seriell (int n, float alpha, float *x, float *y) {for (int i = 0; i < n; ++i) {

y[i] = alpha * x[i] + y[i];}

}// Funktionsaufrufsaxpy_seriell(n, 3.0, x, y);

yxy

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 19: General Purpose Computation on Graphics Processing Units (GPGPU)

19

Code Beispiel 1

Beispiel: SAXPYParallele Lösung mit CUDA:

// Kernel Definition__global__void saxpy_parallel(int n, float alpha, float *x, float *y) {

int i = blockIdx.x * dimBlock.x + threadIdx.x;if (i < n) {

y[i] = alpha * x[i] + y[i];}

}

// Kernel Aufruf (Invocation)Dim3 dimGrid(4);Dim3 dimBlock(256);saxpy_parallel <<<dimGrid, dimBlock>>> (1024, 3.0, x, y);

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 20: General Purpose Computation on Graphics Processing Units (GPGPU)

20

CUDA Speicherhierachie

SpeicherhierachieLokaler Speicher

Pro Thread

Gemeinsamer Speicher

Pro Thread Block

Globaler Speicher

Pro Anwendung

[Vgl. NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 21: General Purpose Computation on Graphics Processing Units (GPGPU)

21

CUDA Kompilierung

KompilierungTrennung von gemischtem CPU / GPU Code

Zusätzliche Kompilierungsschritte

Hardware Abstraktion

.cpp

.cu

.ptx

[Vgl. Ha08]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 22: General Purpose Computation on Graphics Processing Units (GPGPU)

22

Motivation

Grundlagen

GPGPU und GPU Computing

AnwendungenMatrix-Matrix Multiplikation

Performance Experiment

Anwendungsszenarien

Fazit und Ausblick

Agenda

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 23: General Purpose Computation on Graphics Processing Units (GPGPU)

23

Matrix-Matrix Multiplikation

Multiplikation zweier Matrizen mit CUDAHohe arithmetische Komplexität

Lösung 1Ohne Ausnutzung von gemeinsamen Speicher

Häufiger Zugriff auf Matrizen A und B aus globalem Speicher

[Vgl. NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 24: General Purpose Computation on Graphics Processing Units (GPGPU)

24

Matrix-Matrix Multiplikation (2)

Lösung 2Aufteilung der Ursprungsmatrizen in Blöcke

Ausnutzung des gemeinsamen SpeichersZwischenspeichern von Teilmatrizen

Lösung 3CUBLAS 2.3: SGEMM

BLAS Level 3 Operation

[Vgl. NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 25: General Purpose Computation on Graphics Processing Units (GPGPU)

25

Code Beispiel 2// Matrix multiplication - Host codevoid MatMul(const Matrix A, const Matrix B, Matrix C){

// Lade Matrix A in GPU SpeicherMatrix d_A;d_A.width = A.width; d_A.height = A.height;size_t size = A.width * A.height * sizeof(float);

cudaMalloc((void**)&d_A.elements, size);cudaMemcpy(d_A.elements, A.elements, size, cudaMemcpyHostToDevice);

// Analog für B// Analog für C (ohne cudaMemcpy)

[Vgl. NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 26: General Purpose Computation on Graphics Processing Units (GPGPU)

26

Code Beispiel 2// Kernelaufrufdim3 dimBlock(BLOCK_SIZE, BLOCK_SIZE);dim3 dimGrid(B.width / dimBlock.x, A.height / dimBlock.y);MatMulKernel<<<dimGrid, dimBlock>>>(d_A, d_B, d_C);

 // Lade Matrix C aus GPU SpeichercudaMemcpy(C.elements, Cd.elements, size, cudaMemcpyDeviceToHost);

 // GPU Speicher freigebencudaFree(d_A.elements); //analog für B und C

[Vgl. NVI09d]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 27: General Purpose Computation on Graphics Processing Units (GPGPU)

27

Performance Experiment

KonfigurationAMD Phenom X4 9650 (2,3 GHz)

GeForce 8800 GTS 640MB (G80)

Windows Vista 64bit

CUDA Toolkit & SDK v2.3

VergleicheEinfache CPU Lösung (Drei geschachtelte Schleifen)

Theoretische CPU Leistung: 73,6 GFlops (18,4 pro Kern)

Einfache CUDA Lösung (Mit gemeinsamem Speicher)

Optimierte CUDA Lösung (CUBLAS 2.3)

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 28: General Purpose Computation on Graphics Processing Units (GPGPU)

28

Performance Experiment (2)

16 32 64 128 256 384 512 768 1024 1536 2048 3072 4096 51200

20

40

60

80

100

120

140

160CUBLAS 2.3 (kernel)CUBLAS 2.3 (effektiv)Simple CUDA (kernel)Simple CUDA (effektiv)Simple CPU (1 Kern)

Matrix Größe n

GFlops

CPU Optimierung: BLAS Bibliotheken (z.B. ATLAS o. AMD ACML) ~15 GFlops pro Kern auf Phenom 9600 [Sa09]

Theoretische vs. praktische Performance

Kernel vs. effektive Performance: Speichertransfers

Flaschenhals: PCIe minimale Problemgröße

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 29: General Purpose Computation on Graphics Processing Units (GPGPU)

29

Einsatz in Supercomputern

Tianhe-1 [TOP09]

5120 GPUs + 5120 CPUs

563 TFlops Linpack Aktuell #5 in TOP500 (1,042 PFlops max) (DP)

Nutzung: Flugzeugsimulation, Öl Exploration

CSIRO CPU-GPU Supercomputer Cluster [CSI09]

64 Nvidia Grafikkarten (256 GPUs) 256 TFlops (DP)

Nutzung: Bio-, Chemie-, Astrophysik- u. Klimaforschung

FASTRA II [UA09]

7 Nvidia Grafikkarten (13 GPUs)

12 TFlops (SP)

Nutzung: Medizinische Bildverarbeitung

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

SP = Single Precision, DP = Double Precision

Page 30: General Purpose Computation on Graphics Processing Units (GPGPU)

30

Anwendungsfelder

PhysiksimulationN-Körper-Problem

Spielphysik („PhysX“)

BildverarbeitungMedizin

Datenanalyse und DatenbankenPostgreSQL mit CUDA [Ho09]

Data Mining, Sortieren

http://www.nvidia.com/object/data_mining_analytics_database.html

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 31: General Purpose Computation on Graphics Processing Units (GPGPU)

31

Anwendungsfelder (2)

Numerik

Signalverarbeitung

Strömungssimulation

VerschlüsselungBrute-Force-Angriffe z.B. auf MD5, SHA1, DECT, GSM, WPA

GPGPU Anlass für stärke Passwörter / Verschlüsslungen

VideoverarbeitungH.264 Encoding

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 32: General Purpose Computation on Graphics Processing Units (GPGPU)

32

Grid Computing

Grid Computing mit GPU UnterstützungFolding@home [SU09]

BOINC (z.B. SETI@home, GPUGRID) [UC09]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 33: General Purpose Computation on Graphics Processing Units (GPGPU)

33

Motivation

Grundlagen

GPGPU und GPU Computing

Algorithmen und Anwendungen

Fazit und Ausblick

Agenda

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 34: General Purpose Computation on Graphics Processing Units (GPGPU)

34

CUDA Vorteile

ProgrammiermodellSkalierbarkeit

Einfachheit

Explizite Parallelisierung

Automatische Threadverwaltung

PerformanceGemeinsamer Speicher

InvestitionSoftware kostenlos, Hardware relativ günstig

Hohe VerbreitungHardware, Anwendungen, Publikationen und Partnerschaften

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 35: General Purpose Computation on Graphics Processing Units (GPGPU)

35

CUDA Nachteile

Keine Rekursion

Teilweise Abweichungen von IEEE 754 Rundungsregeln

CPU-GPU Transfer Flaschenhals

Sehr viele Threads nötig für volle Auslastung

Viel spezieller Code / spezielles Programmierwissen hiCUDA [HA09], CUDA-lite [ULB08]

Auf Nvidia Grafikkarten beschränkt Standards: OpenCL, DirectX 11

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 36: General Purpose Computation on Graphics Processing Units (GPGPU)

36

Motivation

Grundlagen

Traditionelles GPGPU

CUDA

Anwendungen

VoraussetzungenProblemgröße / arithmetische Komplexität

Datenparallelität

Datenlokalität

„Demokratisierung der parallelen Programmierung“ [NBG08]

Preis / Performance Verhältnis

Verbreitung und Relevanz für Konsumenten

Fazit

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 37: General Purpose Computation on Graphics Processing Units (GPGPU)

37

Ausblick

Nvidia Fermi

OpenCL

DirectCompute

Konvergenz und Integration von GPU und CPUParallellität (CPU)

Multi-threading Multi-core Many-core

Programmierbarkeit (GPU)„Fixed Function“ Teilweise programmierbar Voll programmierbar

Beispiele: Intel Larrabee, AMD Fusion, Intel SCC

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 38: General Purpose Computation on Graphics Processing Units (GPGPU)

38

Extra: CUDA Einstieg

Was benötige ich um CUDA Programme auszuführen?CUDA-fähige Grafikkarte

Desktop & Notebook Grafikkarten ab GeForce 8 mit ≥ 256 MB Speicher

Professionelle Grafikkarten (Quadro, Tesla)

Liste http://www.nvidia.com/object/cuda_learn_products.html

Aktueller CUDA Treiber

Was benötige ich um CUDA Programme zu schreiben?CUDA Toolkit

CUDA SDK (optional)

Visual Studio 2008 (optional)

CUDA ZONE http://www.nvidia.com/object/cuda_home.html

GPGPU Portal http://gpgpu.org/

Vollständige Quellen u. Links: siehe AusarbeitungMotivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

Page 39: General Purpose Computation on Graphics Processing Units (GPGPU)

39

Fragen

Alexander [email protected]

Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick