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

General Purpose Computation on Graphics Processing Units (GPGPU)

  • Upload
    thalia

  • View
    53

  • Download
    0

Embed Size (px)

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

Citation preview

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

PerformanceProgrammierbarkeit

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 PipelineGrafik APIsGrafik ShaderGrafik 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ärBestandteil der Microsoft DirectX API Sammlung

OpenGLPlattformunabhängigKoordiniert 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 ShaderGeometry ShaderPixel 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 GrafikUnterschiede: Speicher, Leistung, Preis

SystemanbindungPCI ExpressBandbreite: 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 ProcessingTraditionelles GPGPUGPU 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 ProgrammiermodellKernel (Instruktionen) angewendet auf Stream (Datenstrom)Je nach Kernel: SIMD oder MIMD KlassifikationKeine explizite Thread Synchronisation und Kommunikation

Geeignet beiHoher arithmetischer KomplexitätDatenparallelitätDatenlokalität

RestriktionenDatenabhängigkeitenRekursion

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ätImprovisiertes ProgrammiermodellMangelnde 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 GPGPUVereinfachungPerformanceVerbreitung

Heterogene AusführungParalleler Code GPUSequentieller 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-HierachieGridsThread blocksThreads

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 VektoradditionSerielle 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 SpeicherPro Thread Block

Globaler SpeicherPro 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 MultiplikationPerformance ExperimentAnwendungsszenarien

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 SpeicherHä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öckeAusnutzung des gemeinsamen Speichers

Zwischenspeichern von Teilmatrizen

Lösung 3CUBLAS 2.3: SGEMMBLAS 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 64bitCUDA 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

160 CUBLAS 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: SpeichertransfersFlaschenhals: 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 CPUs563 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-ProblemSpielphysik („PhysX“)

BildverarbeitungMedizin

Datenanalyse und DatenbankenPostgreSQL mit CUDA [Ho09]Data Mining, Sortierenhttp://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

ProgrammiermodellSkalierbarkeitEinfachheitExplizite ParallelisierungAutomatische 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

MotivationGrundlagenTraditionelles GPGPUCUDAAnwendungen

VoraussetzungenProblemgröße / arithmetische KomplexitätDatenparallelitätDatenlokalitä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 FermiOpenCLDirectCompute

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

Multi-threading Multi-core Many-coreProgrammierbarkeit (GPU)

„Fixed Function“ Teilweise programmierbar Voll programmierbarBeispiele: 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 EinstiegWas benötige ich um CUDA Programme auszuführen?

CUDA-fähige GrafikkarteDesktop & Notebook Grafikkarten ab GeForce 8 mit ≥ 256 MB SpeicherProfessionelle 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 ToolkitCUDA 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