General Purpose Computation on GPUs Matthias Schneider, Robert Grimm Universität Erlangen-Nürnberg {matthias.schneider, robert.grimm}@informatik.stud.uni-erlangen.de M. Schneider, R. Grimm 1
Übersicht Einleitung Geschichte Einsatzgebiete und aktuelle Projekte Diskussion Ausblick M. Schneider, R. Grimm 2
1. Einleitung Ursprünglicher Zweck von GPUs: Beschleunigung von Grafikanwendungen Kurze Evolutionszyklen Geringer Preis Hohe Performance durch Spezialisierung auf datenparallele Operationen (SIMD) M. Schneider, R. Grimm 3
1. Einleitung Hohe Performance durch Spezialisierung auf datenparallele Operationen (SIMD) M. Schneider, R. Grimm 4
1.1 GPGPU General-Purpose Computation Using Graphics Hardware so alt wie Grafikhardware Programmierung von Vektorprozessoren Erste Anwendungen in den 80er Jahren Ausnutzen der Spezialisierung nur sinnvoll möglich für Anwendungen mit guter Parallelisierbarkeit und hoher arithmetischer Intensität M. Schneider, R. Grimm 5
2. Geschichte Zunehmende Flexibilität der Pipeline erlaubt erst seit kurzem hohe Programmierbarkeit (Pixel, Vertex, Geometry Shader) M. Schneider, R. Grimm 6
2.1 GPU Programming Früher: Programmierbare Shader (OpenGL hacking) Vorgehensweise 1. Kernel bestimmen, Input/Output: Texturen 2. Kernel aufrufen durch Zeichnen eines Rechtecks Array-Element = Pixel 3. Rasterizer erzeugt Fragment für jeden Pixel des Rechtecks 4. Für jedes Fragment wird der Kernel ausgeführt 5. Output in Textur (statt Bildschirm) Programmieren = Bilder synthetisieren Ungewohnte Denkweise zu umständlich um sich durchzusetzen M. Schneider, R. Grimm 7
2.2 GPGPU Programming Vermeidung der Computergrafik-API (Metaprogrammiersprachen) Diverse Ansätze: Scout, Accelerator, CgiS, RapidMind, Brook AMD: CTM/CAL, Brook+ Assembler, Stream Programming mit C Nvidia: CUDA C für GPUs GPU-Hersteller und Industrie haben Potential erkannt: Spezielle GPGPU Hardware (Nvidia Tesla) M. Schneider, R. Grimm 8
2.2 GPGPU Programming: Brook+ Codeausschnitt Brook+ (Quelle: http://ati.amd.com/technology/streamcomputing/amd-brookplus.pdf) kernel void sum(float a<>, float b<>, out float c<>) { c = a + b; } int main(int argc, char** argv) { } int i, j; } float a<10, 10>, b<10, 10>, c<10, 10>; float input_a[10][10], input_b[10][10], input_c[10][10]; // init input_[a,b] // [...] streamread(a, input_a); streamread(b, input_b); sum(a, b, c); streamwrite(c, input_c); // sumcpu for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { c[i][j] = a[i][j] + b[i][j]; M. Schneider, R. Grimm 9
3. GPGPU Einsatzgebiete M. Schneider, R. Grimm 10
3.1 Aktuelle Projekte Gut dokumentierte Beispiele: GPU Gems 2/3 Datenbanken: Suchen / Sortieren (Medizinische) Bildverarbeitung: MR Bildrekonstruktion (Studienarbeiten) lineare Algebra (Vektor-Vektor, Matrix-Matrix Multiplikationen) 10x Speedup (vs. optimierte CPU Libraries) Weniger würde sich auch kaum lohnen: 2x QuadCore M. Schneider, R. Grimm 11
3.1 Aktuelle Projekte: MR Bildrekonstruktion Z= X Y, X C r s,y C s t Matrix-Matrix-Multiplikation MKL: Intel Math Kernel Library (hoch optimierte Mathebibliothek) Intel Core 2 6700 dual-core CPU 2.66 GHz, 2x2MB L2 cache, 2 GB RAM (333 MHz) NVIDIA GeForce 8800 GTX GPU, CUDA 1.1, OpenSuse 10.3 (Linux) M. Schneider, R. Grimm 12
3.1 Aktuelle Projekte: MR Bildrekonstruktion ca. 200 000 * K Skalarprodukte der Länge 4 * K Effizienz der CUBLAS-Library stark abhängig von Problemgröße und Speicher-Alignment! (Matrix-Dim. < 512) Intel Xeon 5150 CPU 2.66 GHz, 2x2MB L2 cache, 4 GB RAM NVIDIA GeForce 8800 GTX GPU, CUDA 1.1, WinXP 64-Bit, single CPU core M. Schneider, R. Grimm 13
3.1 GPGPU Performance M. Schneider, R. Grimm 14
4. Diskussion Eine der Stärken von GPUs ist auch eine ernstzunehmende Schwäche: schnelle Innovationszyklen. alle 18 Monate komplett neue Generation von Hard- und Software höherer Wartungsaufwand als CPUs Portierung auf GPU oft nicht trivial (inhärent sequentielle Algorithmen) Performance von GPUs richtig einschätzen: 350 GFLOPs für MAD Theoretische peak performance aktueller CPUs auch schon bei 100 GFLOPs CUDA: Abstraktion von OpenGL aber dafür komplett neue Architektur mit verschiedenen Arten von Speicher. Double precision in vielen wissenschaftlichen Anwendungen gefordert, aber noch nicht verfügbar M. Schneider, R. Grimm 15
5. Ausblick AMD Fusion, Intel Larrabee: GPU näher an CPU Hoch paralleler Coprozessor (Hoffentlich) bessere Anbindung an Speicherbus M. Schneider, R. Grimm 16
General Purpose Computation on GPUs Fragen?! Vielen Dank für die Aufmerksamkeit! M. Schneider, R. Grimm 17
Literatur J. D. Owens et al.: A Survey of general-purpose computation on Graphics Hardware. Computer Graphics Forum, 26(1):80-113, March 2007. D. Lübcke: GPU Applications & Implications. ASPLOS 2008 Tutorial, NVIDIA Research, March 2007. http://www.gpgpu.org/asplos2008/asplos08-4-gpu-architecture.pdf http://www.gpgpu.org M. Schneider, R. Grimm 18