Stream Processing und High- Level GPGPU Sprachen Seminar Programmierung von Grafikkarten Jens Breitbart
Problem 5000% 4000% 3000% 2000% Rechenleistung: +71% pro Jahr Bandbreite: +25% pro Jahr Zugriffszeit: +5% pro Jahr 2 1000% 0% 2005 2006 2007 2008 2009 2010 2011 2012
Übersicht Stream Processing High-Level GPGPU Sprachen Sh Crashkurs Zusammenfassung 3
Stream Processing Übersicht 4 Stream Processing Paradigma Was ist das? Was ist ein Stream? Was ist ein Kernel? Beispiel Vorteile des Stream Processing Paradigmas? Kommunikation Berechnung GPU Pipeline aus Sicht des Stream Processing Fazit
SP Was ist das? 5 Ausdrücken von Berechnungen durch Streams und Kernel
SP Was ist ein Stream? Geordnete Menge von Daten mit folgenden Eigenschaften: gleicher Datentyp für alle Elemente im Stream unbegrenzte Länge (meist sehr lang) erlaubte Operationen kopieren Substreams aus Stream bilden 6 Elemente mit Hilfe eines weiteren Index-Streams indizieren Kernel anwenden
SP Was ist ein Kernel? Funktion mit folgenden Eigenschaften: Eingabe und Ausgabe sind Streams wird immer auf kompletten Stream angewendet Ausgabe hängt nur von der Eingabe ab 7 Berechnung eines Elementes im Ausgabestream unabhängig von den Berechnungen der anderen Elemente
SP Was ist das? 8 Ausdrücken von Berechnungen durch Streams und Kernel
9 SP Beispiel
10 SP Beispiel
SP Vorteile Kommunikation Lesen des kompletten Streams von externem Speicher Amortisierung der Kosten für die Initialisierung Kommunikation zwischen Kernels kann innerhalb des Prozessors erfolgen aggressives Caching ermöglicht Weiterrechnen trotz fehlender Daten 11
SP Vorteile Noch mehr? Stichwort: Parallelität 12
SP Vorteile Berechnung Parallelität mehrere Kernel parallel ausführen task level parallelism Elemente innerhalb der Kernel parallel berechnen data level parallelism Befehle für das Berechnen eines Elements gleichzeitig ausführen instruction level parallelism 13
SP GPU Pipeline 14 Alternative z.b. Cell BE
SP Fazit auf passender Hardware kann Stream Processing sehr viel Performance freisetzen GPUs aber: starke Einschränkungen schwer zu programmieren nicht für alle Aufgaben gut geeignet 15 Stream Processing auf GPUs Stream Processing-Einschränkungen Hardware-Einschränkungen
GPGPU Sprachen Übersicht High-Level GPGPU Sprachen Glift Accelerator PyGPU BrookGPU Sh Fazit 16
GPGPU Sprachen Überblick Glift Bibliothek benutzt C++ und Cg Ziel: getrennte Entwicklung von Algorithmen und Datenstrukturen STL für Cg aktuell noch nicht verfügbar entwickelt an der Stanford University 17
GPGPU Sprachen Überblick Accelerator Bibliothek benutzt.net bietet data level parallelism durch spezielle Datenstrukturen ( ParallelArray ) aktuell noch nicht verfügbar entwickelt von Microsoft Research 18
GPGPU Sprachen Überblick PyGPU Bibliothek benutzt Python und Cg Bibliothek für Bildbearbeitung auf GPUs, bietet aber auch mathematische Grundfunktionalität V 0.1 verfügbar entwickelt an der Lund University (Schweden) 19
GPGPU Sprachen Überblick 20 BrookGPU eigenständige Sprache Erweiterung von ANSI C implementiert Stream Processing Paradigma kernel void saxpy (float alpha, float4 x<>, float4 y<>, out float4 result<>) { result = (alpha * x) + y; } Open Source, aber praktisch keine sichtbare Entwicklung entwickelt an der Stanford University
GPGPU Sprachen Überblick Sh komplett in C++ integrierte Sprache unterstützt verschiedene Backends: CPU, GPU, Cell BE Stream Processing & Shader für 3D-Anwendungen Open Source aktive Entwicklung entwickelt an der Waterloo University (Kanada) bzw. durch RapidMind 21
GPGPU Sprachen Fazit es gibt noch viele Probleme z.b. kein sicherer Schutz vor Hardware- Limitationen aktuell: Forschungsgebiet, nicht unbedingt für den Endanwender 22 aber: für Entwickler ohne Erfahrung in 3D- Anwendungen deutlich einfacher
Sh Crashkurs Sh Crashkurs Immediated mode Stream programming Kontrollkonstrukte Fazit 23
Sh Crashkurs - Immediated mode ShPoint3f a (0.23, 0.42, 2.3); ShVector3f b (4.2, 10.0, 1.0); ShMatrix3x4f M; ShPoint3f c= M (a + 0.5 * normalize(b)); Berechnung auf Host System, nicht auf GPU Sh als Bibliothek 24
Sh Crashkurs - Streaming prog. 25 ShMatrix3x4f M; ShProgram displacement = SH_BEGIN_PROGRAM( gpu:stream ) { ShInputPoint3f a; ShInnputVector3f b; ShOutputPoint3f c = M (a + 0.5 * normalize(b)); } SH_END; ShChannel<ShPoint3f> p, q; ShChannel<ShVector3f> v; //Channel mit Daten füllen q = displacement << p << v;
Sh Crashkurs Was passiert hier? 26 bool X = true; ShProgram simple = SH_BEGIN_PROGRAM( gpu:stream ) { ShInputVector3f a; ShOutputVector3f b; if (X) b = -a; else b = a; } SH_END; X=false; z = simple << just_a_stream;
Sh Crashkurs...oder zur Laufzeit 27 ShProgramm easy = SH_BEGIN_PROGRAMM( gpu:stream ) { ShInputVector3f a; ShInputAttrib1f X; ShOutputVector3f b; SH_IF (X) { //wenn X>0 b = -a; } SH_ELSE { b = a; } SH_ENDIF; } SH_END;
Sh Crashkurs Fazit außerdem gibt es z.b. noch Texturen, Streams, Schleifen, Sh ermöglicht Entwicklung gemäß dem Stream Processing Paradigma relativ einfach und (theoretisch) ohne GPU- Kenntnisse zu erlernen Sh schützt aber nicht vor GPU-Limitationen 28 Sh enthält noch Bugs
Zusammenfassung Stream Processing Stream Processing = Berechnungen mit der Hilfe von Streams und Kernel ausdrücken GPU kann als Stream Prozessor interpretiert werden High-Level GPGPU Sprachen es gibt einige keine ist wirklich gut 29
Literatur John Owens: Streaming Architectures and Technology Trends Pascal Vicaire: Stream Processing Ujival J. Kapasi et al.: Programmable Stream Processors Michael McCool, Stefanus Du Toit: Metaprogramming GPUs with Sh 30
Literatur Ian Buck et al.: Brook for GPUs: Stream Computing on Graphics Hardware David Tarditi et al.: Accelerator: simplified programming of graphics processing units for general-purpose uses via data parallelism Aaron E. Lefohn et al.: Glift: Generic, Efficient, Random-Access GPU Data Structures 31 Calle Lejdfors, Lennart Ohlsson : PyGPU: A high-level language for high-speed image processing