390 likes | 542 Views
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
E N D
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 • General 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
Agenda • Motivation • Grundlagen • Grafik Pipeline • Grafik APIs • Grafik Shader • Grafik Hardware • GPGPU und GPU Computing • Anwendungen • Fazit und Ausblick Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Grafik Pipeline • Grafik Pipeline • Modell der einzelnen Schritte zum „Rendern” einer 3D-Szene (Bildsynthese) [Vgl. BB03, XP07] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Grafik APIs • Grafik APIs (Programmierschnittstellen) • Abstraktion von Hardware und Treiber • Direct3D • Proprietär • Bestandteil der Microsoft DirectX API Sammlung • OpenGL • Plattformunabhängig • Koordiniert durch die Khronos Group Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Grafik Shader • Grafik Shader • Kleine Programme zur Flexibilisierung der Grafik Pipeline • Programmierbar in: Assembler, HLSL, Cg oder GLSL • Drei Typen • Vertex Shader • Geometry Shader • Pixel Shader • Unified Shaders • Harmonisierung der drei Typen [Vgl. NVI06] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Grafik Shader (2) • Unified Shaders • Performance Verbesserung durch höhere, gleichmäßige Auslastung [Vgl. NVI06] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Grafik Hardware • Grafikkarten im System • Dedizierte Grafikkarten vs. integrierte Grafik • Unterschiede: Speicher, Leistung, Preis • Systemanbindung • PCI 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
Agenda • Motivation • Grundlagen • GPGPU und GPU Computing • Stream Processing • TraditionellesGPGPU • GPU Computing mit CUDA • Anwendungen • Fazit und Ausblick Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Stream Processing • Stream Processing • Einfaches paralleles Programmiermodell • Kernel (Instruktionen) angewendet auf Stream (Datenstrom) • Je nach Kernel: SIMD oder MIMD Klassifikation • Keine explizite Thread Synchronisation und Kommunikation • Geeignet bei • Hoher arithmetischer Komplexität • Datenparallelität • Datenlokalität • Restriktionen • Datenabhängigkeiten • Rekursion Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Stream Processing (2) • Einfluss auf Hardware-Architekturen • Reduktion von Control & Cache möglich • Höherer Anteil Recheneinheiten (ALUs) CPU GPU [Vgl. NVI09d] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Traditionelles GPGPU • Direkte Nutzung der Grafik APIs und Programmiersprachen • Nachteile • Hohe Komplexität • Improvisiertes Programmiermodell • Mangelnde Präzision (Ungenaue Datentypen) Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
GPU Computing mit CUDA • Nvidia CUDA (Compute Unified Device Architecture) • Software u. Hardwarearchitektur für parallele Programmierung • Verbesserung gegenüber GPGPU • Vereinfachung • Performance • Verbreitung • Heterogene Ausführung • Paralleler Code GPU • Sequentieller Code CPU • GPGPU GPU Computing Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
CUDA Übersicht [Vgl. NVI09a] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
CUDA Komponenten • Weitere CUDA Komponenten • Compiler • Funktionsbibliotheken • CUBLAS für lineare Algebra (Basic Linear Algebra Subprograms) • CUFFT für Fourier-Transformation (FFT) • Debugger cudagdb • Profiler cudaprofzur Optimierung Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
CUDA Programmiermodell • Thread-Hierachie • Grids • Thread blocks • Threads • Thread Identifizierung • Implizit definierte Variablen: threadIdx.x .y .z blockIdx.x .y .z • Kernel Aufruf Dim3 dimGrid(3, 2); Dim3 dimBlock(4, 3); kernel<<<dimGrid, dimBlock>>>(parameter); [Vgl. NVI09d] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
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]; } } // Funktionsaufruf saxpy_seriell(n, 3.0, x, y); Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Code Beispiel 1 • Beispiel: SAXPY • Parallele 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
CUDA Speicherhierachie • Speicherhierachie • Lokaler Speicher • Pro Thread • Gemeinsamer Speicher • Pro Thread Block • Globaler Speicher • Pro Anwendung [Vgl. NVI09d] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
CUDA Kompilierung • Kompilierung • Trennung von gemischtem CPU / GPU Code • Zusätzliche Kompilierungsschritte • Hardware Abstraktion .cu .cpp .ptx [Vgl. Ha08] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Agenda • Motivation • Grundlagen • GPGPU und GPU Computing • Anwendungen • Matrix-Matrix Multiplikation • Performance Experiment • Anwendungsszenarien • Fazit und Ausblick Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Matrix-Matrix Multiplikation • Multiplikation zweier Matrizen mit CUDA • Hohe arithmetische Komplexität • Lösung 1 • Ohne 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
Matrix-Matrix Multiplikation (2) • Lösung 2 • Aufteilung der Ursprungsmatrizen in Blöcke • Ausnutzung des gemeinsamen Speichers • Zwischenspeichern von Teilmatrizen • Lösung 3 • CUBLAS 2.3: SGEMM • BLAS Level 3 Operation [Vgl. NVI09d] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Code Beispiel 2 // Matrix multiplication - Host code void MatMul(const Matrix A, const Matrix B, Matrix C) { // Lade Matrix A in GPU Speicher Matrix 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
Code Beispiel 2 // Kernelaufruf dim3 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 Speicher cudaMemcpy(C.elements, Cd.elements, size, cudaMemcpyDeviceToHost); // GPU Speicher freigeben cudaFree(d_A.elements); //analog für B und C [Vgl. NVI09d] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Performance Experiment • Konfiguration • AMD Phenom X4 9650 (2,3 GHz) • GeForce 8800 GTS 640MB (G80) • Windows Vista 64bit • CUDA Toolkit & SDK v2.3 • Vergleiche • Einfache 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
Performance Experiment (2) • 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
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 SP = Single Precision, DP = Double Precision Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Anwendungsfelder • Physiksimulation • N-Körper-Problem • Spielphysik („PhysX“) • Bildverarbeitung • Medizin • Datenanalyse und Datenbanken • PostgreSQL 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
Anwendungsfelder (2) • Numerik • Signalverarbeitung • Strömungssimulation • Verschlüsselung • Brute-Force-Angriffe z.B. auf MD5, SHA1, DECT, GSM, WPA • GPGPU Anlass für stärke Passwörter / Verschlüsslungen • Videoverarbeitung • H.264 Encoding Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Grid Computing • Grid Computing mit GPU Unterstützung • Folding@home [SU09] • BOINC (z.B. SETI@home, GPUGRID) [UC09] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Agenda • Motivation • Grundlagen • GPGPU und GPU Computing • Algorithmen und Anwendungen • Fazit und Ausblick Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
CUDA Vorteile • Programmiermodell • Skalierbarkeit • Einfachheit • Explizite Parallelisierung • Automatische Threadverwaltung • Performance • Gemeinsamer Speicher • Investition • Software kostenlos, Hardware relativ günstig • Hohe Verbreitung • Hardware, Anwendungen, Publikationen und Partnerschaften Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
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
Fazit • Motivation • Grundlagen • Traditionelles GPGPU • CUDA • Anwendungen • Voraussetzungen • Problemgröße / arithmetische Komplexität • Datenparallelität • Datenlokalität • „Demokratisierung der parallelen Programmierung“ [NBG08] • Preis / Performance Verhältnis • Verbreitung und Relevanz für Konsumenten Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Ausblick • Nvidia Fermi • OpenCL • DirectCompute • Konvergenz und Integration von GPU und CPU • Parallellitä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
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 Ausarbeitung Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick
Fragen • Alexander Zibula a.zibula@uni-muenster.de Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick