General Purpose Computation on Graphics Processing Units (GPGPU)
-
Upload
harriet-wiley -
Category
Documents
-
view
41 -
download
0
description
Transcript of 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)
2
Motivation
Grundlagen
GPGPU und GPU Computing
Anwendungen
Fazit und Ausblick
Agenda
Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
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
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
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
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
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
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
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
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
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
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
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
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
15
CUDA Übersicht
[Vgl. NVI09a]
Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
33
Motivation
Grundlagen
GPGPU und GPU Computing
Algorithmen und Anwendungen
Fazit und Ausblick
Agenda
Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
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
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
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
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
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
39
Fragen
Alexander [email protected]
Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick