View
53
Download
0
Category
Tags:
Preview:
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
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
PerformanceProgrammierbarkeit
Zahlreiche Anwendungen
[NVI09d]
Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
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
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ärBestandteil der Microsoft DirectX API Sammlung
OpenGLPlattformunabhängigKoordiniert 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 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
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 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
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
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
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ätImprovisiertes ProgrammiermodellMangelnde 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 GPGPUVereinfachungPerformanceVerbreitung
Heterogene AusführungParalleler Code GPUSequentieller 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-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
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
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 SpeicherPro Thread Block
Globaler SpeicherPro 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 MultiplikationPerformance ExperimentAnwendungsszenarien
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 SpeicherHä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ö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
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 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
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
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
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
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
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
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
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
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
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
39
Fragen
Alexander Zibulaa.zibula@uni-muenster.de
Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Recommended