1 / 39

General Purpose Computation on Graphics Processing Units (GPGPU)

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

Download Presentation

General Purpose Computation on Graphics Processing Units (GPGPU)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. General Purpose Computation on Graphics Processing Units (GPGPU) Mit Nvidia CUDA

  2. Agenda • Motivation • Grundlagen • GPGPU und GPU Computing • Anwendungen • Fazit und Ausblick Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. CUDA Übersicht [Vgl. NVI09a] Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

  16. 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

  17. 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

  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]; } } // Funktionsaufruf saxpy_seriell(n, 3.0, x, y); Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  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 SP = Single Precision, DP = Double Precision Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

  30. 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

  31. 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

  32. 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

  33. Agenda • Motivation • Grundlagen • GPGPU und GPU Computing • Algorithmen und Anwendungen • Fazit und Ausblick Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

  34. 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

  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. 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

  37. 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

  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 Ausarbeitung Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

  39. Fragen • Alexander Zibula a.zibula@uni-muenster.de Motivation Grundlagen GPGPU u. GPU Computing Anwendungen Fazit u. Ausblick

More Related