Inhaltsverzeichnis
Transcrição
Inhaltsverzeichnis
Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Namen der Autoren: Titel der Arbeit: Hochschule und Studienort: Studiengang: Name des Betreuers: Erstellungszeitraum: Datum der Abgabe: Robert Wiesner Einfluss der GPGPU auf die zukünftige technologische Entwicklung Fachhochschule für Oekonomie und Management Essen Bachelor of Science / Wirtschaftsinformatik, 3. Fachsemester Dipl-Inf. (FH) Christian Schäfer WS 2009 06.02.2010 Inhaltsverzeichnis • 1 Abkürzungsverzeichnis • 2 Abbildungsverzeichnis • 3 Tabellenverzeichnis • 4 Ziele und Aufbau dieser Arbeit • 5 Grundlagen ♦ 5.1 Mooresches Gesetz ♦ 5.2 Definition und Entwicklung CPU ♦ 5.3 Definition GPU ◊ 5.3.1 Grafik Pipeline [7][8] ⋅ 5.3.1.1 Higher-order Surface Tessellation ⋅ 5.3.1.2 Vertex Shading including Transform and Lighting ⋅ 5.3.1.3 Triangle Setup ⋅ 5.3.1.4 Pixel Shading and Rendering (including texturing) ♦ 5.4 Entwicklung GPU ◊ 5.4.1 Shader-Konzept [10][11] ⋅ 5.4.1.1 Pixel & Vertex Shader ⋅ 5.4.1.2 Unified-Shader-Model • 6 Rechnen mit der GPU ♦ 6.1 Leistungskennzahlen[12][13][14] ♦ 6.2 CPU vs. GPU ◊ 6.2.1 Hardwarevergleich ♦ 6.3 Technologien ◊ 6.3.1 NVIDIA CUDA ⋅ 6.3.1.1 Hardware Konzept ⋅ 6.3.1.2 Begriffsdefinition Kernel ⋅ 6.3.1.3 Abstraktion der Parallelisierung ⋅ 6.3.1.4 Hierarchie gleichzeitiger Threads Inhaltsverzeichnis 1 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung ⋅ 6.3.1.5 Ebenen der Parallelität ⋅ 6.3.1.6 CUDA API • 6.3.1.6.1 Funktions- und Variablenqualifizierer[23] • 6.3.1.6.2 Weitere Funktionen • 6.3.1.6.3 CUDA-Compiler ◊ 6.3.2 NVIDIA Tesla ◊ 6.3.3 ATI Stream ◊ 6.3.4 OpenGL ◊ 6.3.5 OpenCL 1.0 ⋅ 6.3.5.1 Spezifikation ⋅ 6.3.5.2 Praxis ◊ 6.3.6 DirectX 11 Direct Compute • 7 Anwendungen ♦ 7.1 Sicherheit ◊ 7.1.1 Auswirkungen auf die Sicherheit ♦ 7.2 Spiele[35] ♦ 7.3 Wissenschaft ◊ 7.3.1 Folding@Home ♦ 7.4 Multimedia ♦ 7.5 Transkodierung • 8 Schlussbetrachtung ♦ 8.1 Wirtschaftlichkeit ♦ 8.2 Praktischer Einsatz ◊ 8.2.1 Verbreitung ◊ 8.2.2 Sicherheit ♦ 8.3 Fazit • 9 Fußnoten • 10 Literatur- und Quellenverzeichnis 1 Abkürzungsverzeichnis Abkürzung Bedeutung Erklärung API Application Programming Interface Programmierschnittstelle CPU Central-Processing-Unit Hauptprozessor CUDA Compute Unified Device Architecture Von NVIDIA entwickelte Soft-und Hardware Architektur DP Double Precision Doppelte Genauigkeit, Zahlenformat nach IEEE-754-Standard 1 Abkürzungsverzeichnis 2 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung DSP Digital signal processor Prozessor für digitale Signalbearbeitung FLOPS Floating Point Operations Per Second Gleitkommaoperationen pro Sekunde FMADD Floating Multiply-Add (Instruction) Kombinierte Addition und Multiplikation in einem Schritt GHz Gigahertz SI-Einheit für die Frequenz GPGPU General Purpose Computation on Graphics Processing Unit GPU in Einsatzzwecken abseits von Grafikberechnungen GPU Graphics Processing Unit Grafikprozessor zur Berechnung grafischer Ausgabe HD High Definition Hochauflösende Inhalte MHz Megahertz SI-Einheit für die Frequenz MIPS Million Instructions per Second Instruktionen eines Prozessors pro Sekunde PPU Physics Processing Unit Physikbeschleuniger zur Berechnung physikalischer Effekte RAM Random Access Memory Arbeitsspeicher in einem Computersystem ROP Raster Operation Processor Teil des Grafikprozessors zur Bildsynthese SIMD Single Instruction, Multiple Data Architektur die in Großrechnen, Supercomputer und GPUs verwendet wird SSE Streaming-SIMD-Extension Befehlssatzerweiterung für Computer-Prozessoren TPC Thread Processing Cluster Bestandteil eines Stream Prozessors T&L Transform and Lighting Schritt in der Rendering-Pipeline für Transformation und Beleuchtung 2 Abbildungsverzeichnis Abb.-Nr. Abbildung 1 Spielszene: The Secret of Monkey Island, Lucasfilm Games 2 Spielszene: Crysis, EA Games 3 Grafik-Pipeline: Wireframe-Modell 4 Grafik-Pipeline: Render Tesselation 5 Grafik-Pipeline: Vertex Shaded, T&L 6 Grafik-Pipeline: Pixel Shaded 7 GFLOPS Performance CPU & GPU 2 Abbildungsverzeichnis 3 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 8 Architekturvergleich CPU vs. GPU 9 GPU: Thread Processing Cluster 10 GPGPU-Thread-Ausführungsmodell 11 Kernelprogramm Vektoraddition in C mit CUDA 12 Hostaufruf Vektoraddition in C mit CUDA 13 Hostaufruf komplett Vektoraddition in C mit CUDA 14 System 1 Screenshot BarsWF_CUDA_x64 MD5 Crack 15 System 2 Screenshot BarsWF_CUDA_x64 MD5 Crack 16 Diagramm Performance BarsWF_CUDA_x64: CPU vs. GPU 17 Screenshot BarsWF_CUDA_x64 MD5 Crack - Ergebnis 18 Nutzungsstatistik Folding@Home 19 TFLOPS Verteilung Folding@Home 20 Leistungsvergleich: Tesla Workstation vs. CalcUA 21 Diagramm Performance Speicherzugriff CPU vs. GPU 3 Tabellenverzeichnis Tabelle Nr. Quelle 1 Hardwarevergleich CPU vs. GPU 4 Ziele und Aufbau dieser Arbeit Die Frage "GPGPU ? die CPU im Abseits?" dient als Untertitel und stellt zugleich das Leitthema dieser Arbeit dar. In der vorliegenden Seminararbeit wird eine Prognose über die Relevanz der Technologie GPGPU (General Purpose Computation on Graphics Processing Unit) in der zukünftigen technologischen Entwicklung formuliert. Neben dem allgemeinen Beweggrund, der zur Entstehung von GPU (Graphics Processing Unit) und GPGPU neben der CPU (Central-Processing-Unit) geführt hat, erfolgen Vorstellung und Vergleich von Software-Komponenten wie NVIDIA CUDA (Compute Unified Device Architecture), ATI Stream und OpenCL. Durch die Gegenüberstellung und Bewertung von heutigen und zukünftigen Einsatzgebieten soll letztendlich eine abschließende Einschätzung der Relevanz von CPU und GPU ermöglicht werden. Aufgrund der schnellen Entwicklung im IT-Sektor kann diese Arbeit nur einen kurzen Einblick in den aktuellen Entwicklungsstand und keine Garantie für 100%ige Aktualität geben. 3 Tabellenverzeichnis 4 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 5 Grundlagen Als IBM den ersten PC im Jahre 1981 auf den Markt brachte, war der Haupteinsatzzweck die Textverarbeitung. Die Hardware- und Peripherie-Ausstattung dementsprechend spartanisch, gemessen an heutigen Verhältnissen[1]. Im Anfangsstadium der Computer-Entwicklung herrschte eine klare Aufgabentrennung innerhalb der Komponenten im System. Basierend auf dem Von-Neumann-Prinzip entwickelte sich schrittweise die heutige Computer-Architektur[2]: • Prozessor bzw. CPU: Zentrale Komponente zur Ablaufsteuerung, Verarbeitung und Delegation von Steuer-Instruktionen • Benutzerschnittstelle: Peripherie in Form von Eingabe- und Ausgabegeräten wie Maus, Tastatur und Monitor • RAM (Random Access Memory): Hauptspeicher für Daten- und Programminformationen • Verbindungseinrichtung: In Adressbus, Datenbus und Steuerbus aufgeteiltes Bussystem Neben dem zunehmenden Einsatz von Computertechnik in Industrie und Wirtschaft, gewinnt der Computer immer mehr Relevanz im Bereich der Unterhaltungselektronik und in multimedialen Einsatzbereichen. Schnell konnten die verfügbaren Systeme den Leistungsanforderungen nicht mehr gerecht werden. Die Weiterentwicklung von Systemkomponenten und Konzepten wird im folgenden Kapitel erläutert. 5.1 Mooresches Gesetz Das Moorsche Gesetz stammt von Intel-Mitbegründer Gordon E. Moore. Es besagt, dass sich die Komplexität integrierter Schaltkreise von Mikroprozessoren exponentiell entwickelt, da in einem Intervall von 2 Jahren eine Verdopplung der Integrationsdichte stattfindet[3]. Höhere Integrationsdichte durch bessere Fertigungstechnik resultiert auch in geringeren Kosten, da in der Herstellung aus einem Wafer mehr Chips gefertigt werden können. 5.2 Definition und Entwicklung CPU Eine CPU ist nach folgendem Konzept konzipiert: aus einem festen Befehlssatz die größtmögliche Leistung ziehen. Dieser Befehlssatz kann auf unterschiedlichen Daten operieren (mit Ganz- oder Fließkommazahlen), führt willkürliche Speicherzugriffe durch und Verzweigungen[4]. Im Jahr 1993 stellte die Firma Intel den Prozessor Pentium mit einer Taktfrequenz von 75-200 MHz (Megahertz) und 3,3 Millionen Transistoren in 0,8 µm Fertigungstechnik vor. Mit dem Pentium Pro kam dann der erste Prozessor auf den Markt, der die Befehle in nicht in geordneter Reihenfolge verarbeitete, um so die für die Ausführung zuständigen Komponenten besser nutzen zu können. Das Problem besteht nämlich darin, dass die parallele Ausführung von Befehlssätzen begrenzt ist. Daher ist es auch vergebens, die Anzahl der Verarbeitungskomponenten blind zu erhöhen, da sie während der meisten Zeit weitestgehend ungenutzt bleiben[4]. Darauf folgend stellte sich ein kontinuierlicher Anstieg der Taktfrequenz in der Entwicklung der Prozessoren ein. Im Jahre 2001 ermöglichten 42,0 Millionen Transistoren bei 180 nm Fertigungstechnik der CPUs eine Taktfrequenz von bis zu 2,00 GHz (Gigahertz). Zwischen 2001 und 2003 ist eine rasante Steigerung der Taktrate zu beobachten. Bedingt durch eine fortschreitende Fertigungstechnik und Miniaturisierung realisierten Prozessorhersteller CPUs mit Taktfrequenzen 5 Grundlagen 5 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung von bis zu 3,0 GHz. Im Vergleich dazu stieg die Taktfrequenz in den folgenden drei Jahren um insgesamt ca. 800 MHz auf 3,8 GHz. Aufgrund physikalischer Grenzen konnte keine Leistungssteigerung durch simple Erhöhung der Taktrate mehr erreicht werden[4]. Eine Tendenz, die sich in modernen Betriebssystemen und Anwendungen abzeichnet, ist die Parallelisierung von Prozessen und Anwendungen. Durch Technologien wie Hyper-Threading versuchte man dieser Anforderung gerecht zu werden, indem ein Prozessor die Existenz eines weiteren seiner Art simuliert, um eine bessere Auslastung zu erreichen. Der aktuelle technologische Trend im Prozessor-Bereich sind Mehrkern-Prozessoren. Auf der eigentlichen CPU sind je nach Modell 2 (Dual Core), 4 (Quad Core) oder 8 (Okta Core) Kerne untergebracht. Da das Moorsche Gesetz nach aktuellen Schätzungen noch weitere 10 Jahre Bestand hat, ist weiterhin mit einer steigenden Transistorzahl pro Chip zu rechnen, um mehr Kerne pro CPU zu realisieren. 5.3 Definition GPU Im Gegensatz zur CPU-Architektur, die für universelle Verarbeitung ausgelegt ist, sind die Arbeitsschritte einer GPU klar definiert: dreidimensionale Daten in Form von Polygonen verarbeiten und als zweidimensionale Pixel-Daten ausgeben. Da kein direkter Zusammenhang zwischen Polygonen und Pixel besteht, ermöglicht dies eine Verarbeitung von parallelen Komponenten. Zusätzlich handelt es sich um einen sehr sequenziellen Ablauf, sodass weniger Steuerlogik und Cache nötig ist. Im Vergleich zur CPU kann ein Großteil der Chipfläche für die Recheneinheiten verwendet und auch effektiv genutzt werden. NVIDIA prägte den Begriff GPU im Jahre 1999 erstmalig mit dem Erscheinen der Grafikkarte NVIDIA GeForce 256[5], vor diesem Zeitpunkt sprach man von einem Grafikprozessor. Diese dedizierte Komponente berechnet grafische Daten und entlastet die CPU. Die verfügbaren grafischen Operationen sind auf dem Grafikchip in Hardware implementiert, sodass die Berechnung um ein vielfaches schneller ist als auf der CPU. Außerdem müssen durch diese Aufgaben Delegation lediglich Steuerinforationen zwischen CPU und Grafikprozessor ausgetauscht werden, anstatt komplette Bildinformationen über den Bus zu schicken[6]. Abbildung 1: Spielszene: The Secret of Monkey Island, Lucasfilm Games Besonders der zunehmende Anteil von Computerspielen erforderte immer mehr leistungsfähigere Computer. Frühe Computerspiele basierten noch auf einfacher 2-D-Grafik und boten dem Spieler wenige Interaktionsmöglichkeiten, allerdings wurden auch damalige Computer regelmäßig an die Leistungsgrenzen getrieben. 5.2 Definition und Entwicklung CPU 6 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Abbildung 2: Spielszene: Crysis, EA Games In einem heutigen Computerspiel jedoch muss die CPU viele parallele Berechnungen, u.a. künstliche Intelligenz, Physiksimulation oder Soundberechnung durchführen sowie Eingaben der Peripherie verarbeiten und in entsprechende Aktionen im Spiel umsetzen. 5.3.1 Grafik Pipeline [7][8] Abbildung 3: Grafik-Pipeline: Wireframe-Modell Die Umwandlung von dreidimensionalen Rohdaten in ein zweidimensionales Bild zur Ausgabe auf dem Monitor findet hauptsächlich auf der GPU, also dem eigentlichen Grafikprozessor statt. Die Aneinanderreihung von Prozessen, die letztendlich zum endgültigen Bild führen, wird als Grafik-Pipeline bezeichnet. 5.3.1.1 Higher-order Surface Tessellation Wie bereits erwähnt, werden 3-D-Objekte für gewöhnlich aus dreieckigen Polygonen zusammengesetzt. Für diese Objekte ist keine Tessellation nötig, denn sie liegen in einer für die GPU optimalen Form vor. 5.3 Definition GPU 7 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Abbildung 4: Grafik-Pipeline: Render Tesselation Komplexere Objekte, die durch mathematische Kurven beschrieben werden, sog. Higher-order Surface, welche im Deutschen unter dem Begriff Freiformflächen bekannt sind, müssen zunächst auf eine Polygondarstellung herunter gebrochen werden. 5.3.1.2 Vertex Shading including Transform and Lighting Die aus Polygonen bestehenden, durch Verticies beschriebenen Objekte, werden in diesem Prozess der Pipeline durch den Vertex Shader transformiert, also positioniert, gedreht und skaliert. Das Ziel ist die korrekte Darstellung im Verhältnis zu anderen Objekten und zur einfacheren Verarbeitung innerhalb der 3-D-Pipeline. Diese Operationen werden durch mathematische Funktionen wie Matrix-Multiplikation durchgeführt. Anschließend erfolgt die Beleuchtung, basierend auf Lichtquellen der Szene und Materialinformationen der Objekte. Diese Berechnung wird für jeden Vertex in der Szene gemacht. In modernen Grafikkarten erfolgen diese Schritte in frei programmierbaren Vertex Shadern. Die freie Programmierbarkeit ermöglicht es, beliebige Änderungen an den Verticies vorzunehmen, bevor diese für die nächsten Verarbeitungsschritte weitergegeben werden. Abbildung 5: Grafik-Pipeline: Vertex Shaded, T&L Mit DirectX 10 wurde zusätzlich ein Geometry-Shader eingeführt, der im Gegensatz zum Vertex Shader neue Geometrie erzeugen kann, anstatt diese nur zu manipulieren. 5.3.1.3 Triangle Setup Triangle Setup oder Dreiecksaufbereitung wandelt die Dreicksdaten zeilenweise in Pixel bzw. Fragmente um. Nicht sichtbare Objekte werden durch Clipping nicht mitberechnet, verdeckte Objekte durch Culling ausgeschlossen. Die mathematische Berechnung liefert ein für die Pixel- oder Fragment-Shading-Einheit verständliches Ergebnis. 5.3.1.4 Pixel Shading and Rendering (including texturing) Bis zu diesem Schritt basierte die Berechnung auf Dreiecksdaten, die Pixel- oder Fragment-Shading-Einheit arbeitet auf Pixelbasis. Programmierbare Pixel Shader erlauben beliebige Per-Pixel-Effekte und -Veränderungen, häufige Anwendung ist die Simulation von Reflektionen von metallischen Oberflächen oder Wasser sowie Refraktion von Wasser oder Glas. Im Anschluss an die Berechnung wird das fertige Bild in den Frame Buffer geschrieben. Als letzten Schritt liest der Bildschirm-Controller den Inhalt des Speichers aus und stellt diesen auf dem Bildschirm dar. 5.3.1.1 Higher-order Surface Tessellation 8 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Abbildung 6: Grafik-Pipeline: Pixel Shaded 5.4 Entwicklung GPU Die Grafikhardware etablierte sich schnell, nachdem Microsoft hierfür erstmalig Unterstützung in Form von DirectX in das Betriebssystem Windows 95 integriert hatte. DirectX ist eine standardisierte Programmierschnittstelle, API (Application Programming Interface), welches optimierte Zugriffe auf diverse Hardwarekomponenten bietet, insbesondere durch Direct3D auf Grafikhardware.[9] Mit Version 7 von DirectX wurde die Hardware-Funktion T&L (Transform and Lighting) eingeführt. Wurden die ersten beiden Schritte, Koordinatentransformation und Beleuchtung, ohne T&L-Unterstützung noch auf der CPU durchgeführt, ermöglichten DirectX 7 kompatible GPU eine in Hardware implementierte Berechnung[9]. 5.4.1 Shader-Konzept [10][11] Die für 3-D-Berechnungen leistungssteigernde T&L-Funktion wird ab Version DirectX 8 vom sog. Vertex Shader übernommen. 5.4.1.1 Pixel & Vertex Shader Ein Vertex ist der Eck- bzw. Scheitelpunkt eines Primitives (= Grundobjekt wie Kreise, Linien). Das Grundobjekt eines 3-D-Objektes ist das Polygon bzw. Dreieck und hat somit 3 Scheitelpunkte. Ein Vertex speichert Positionsdaten, Texturkoordinaten, Lichtwerte und Daten zur Oberflächenberechnung. Im Prozess des Pixel Shading wird auf diese Daten zurückgegriffen, um eine Oberfläche zu simulieren. Neben Pixel- und Vertex-Shadern gibt es sogenannte Unified-Shader, welche essenziell für die Entwicklung der GPGPU sind. 5.4.1.2 Unified-Shader-Model Trotz des enormen Leistungs- und Qualitäts-Zuwachses hat sich im Laufe der Zeit ein entscheidender Nachteil herausgestellt: Analog zum vorherigen Entwicklungsschritt begrenzt eine feste Funktionsaufteilung auf 2 verschiedene Komponenten unter Umständen die Leistung. Beispielsweise lässt sich dieses Phänomen bei mittelklasse DirectX9-Grafikkarten feststellen, die mit zu wenig Vertex-Shader-Einheiten ausgestattet sind, während die Pixel Shader nicht ausgelastet werden und so Leistung "verschenkt" wird Unified-Shader-Architektur bedeutet, dass jede (Hardware-)Shader-Unit auf der Grafikkarte die Funktion eines Vertex-, Pixel- oder Geometry-Shader übernehmen kann, die Verteilung der Leistungsressourcen erfolgt dynamisch. Die Unified-Shader- und Geometry-Shader-Funktionen wurden mit Version DirectX10 eingeführt. 5.3.1.4 Pixel Shading and Rendering (including texturing) 9 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 6 Rechnen mit der GPU Die zuvor beschriebene Entwicklung macht deutlich, dass sich die GPU-Architektur in kurzer Zeit rasant entwickelt hat und weitreichende Änderungen stattgefunden haben. Vor allem der Aspekt der Generalisierung, also das Ermöglichen eines universellen Einsatzes, sticht hervor. General Purpose-Anwendungen auf der GPU auszuführen, wird als GPGPU bezeichnet Mit dem Fokus auf Lastenverteilung und hoher Hardwareauslastung entwickelte sich die GPU von einer fixed-Function-Einheit zu einer Komponente mit parallel programmierbaren Prozessoren (Unified Shader) für einen universellen Einsatzzweck. Der im Jahre 2006 vorgestellte AMD Stream-Prozessor (CPU) implementierte erstmalig eine Unified-Shader-Architektur, mit dem Ziel, durch hardwarenahe Berechnungen möglichst hohe Rechenleistung zu erbringen. Abbildung 7: GFLOPS Performance CPU & GPU, Quelle Nvidia 6.1 Leistungskennzahlen[12][13][14] Eine gebräuchliche Leistungkennzahl ist der FLOPS-Wert (Floating Point Operations per Second). Er gibt an, wie viele Gleitkommaberechnungen pro Sekunde ausgeführt werden können. Zum jetzigen Zeitpunkt befinden wir uns in der Dimension von Giga-(Milliarden), Tera-(Milliarden) oder auch Petaflops (Billiarden) sekündlicher Rechenoperationen. Die Top-500-Listen der jeweils schnellsten Superrechner werden mit dem Benchmark Linpack ermittelt, bei dem die Supercomputer Gleitkommazahlen ?doppelter? Genauigkeit DP (Double Precision) verarbeiten. Hierbei handelt es sich also um tatsächlich erreichte Leistungswerte[15]. CPU- und GPU-Hersteller geben in der Regel die theoretischen Höchstwerte bei optimalen Befehlskombinationen an. Eine optimale Befehlskombination für einen Gleitkommazahlen verarbeitenden x86-Prozessor ist ein FMADD-Befehl (Floating Multiply Add). In diesem Fall führen die Streaming-SIMD-Extensions-Einheiten (SSE) gleichzeitig eine Multiplikation und Addition in einem kombinierten Befehl aus. In den Herstellerangaben wird dieser einzelne Befehl als jeweils zwei einzelne Operationen gewertet. Aktuelle x86-Prozessoren besitzen 128-Bit-SSE-Einheiten und verarbeiten mit einem FMADD-Befehl zwei DP-Gleitkommazahlen. Eine DP-Operation kann auch zwei Singe-Precision-Berechnungen durchführen. Ein DP-Flop entspricht zwei SP-Flops, eine 128-Bit-SSE-Einheit schafft vier SP-Flops pro Takt. 6 Rechnen mit der GPU 10 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Die theoretischen CPU-Höchstwerte hängen also von der Anzahl und Taktung der SSE-Einheiten ab. Aktuelle Prozessoren wie AMD Phenom, Intel Core 2 Quad und Intel Core i7 besitzen 8 128 Bit SSE-Einheiten, jedem Kern sind zwei Einheiten zugeordnet. Bei einer Taktfrequenz von 3,0 GHz erreicht die CPU 48 DP- oder 96 SP-GFlops, jeder einzelne Kern also 12 DP- bzw. 24 DP-GFlops. Die reale Performance hängt natürlich von den sonstigen Eigenschaften des Systems und der CPU-Architektur ab. Dazu zählen Cache, Speicheranbindung oder andere Details der Architektur. Durch den Linpack Benchmark lässt sich die Obergrenze für die praktisch nutzbare Rechenleistung ermitteln, da nur eine Rechenaufgabe durchgeführt wird und CPUs und Compiler Linpack optimiert sind[15]. GPU-Hersteller geben bei GFLOPS Angaben von SP-Berechnungen aus, da nur wenige GPUs überhaupt gleitkommatauglich sind. Für die bisherigen Einsatzzwecke war eine einfache Genauigkeit ausreichend, da viele Programme mit ganzen Zahlen, logischen Operatoren oder Spezialbefehlen arbeiten. Für diese Art der CPU-Rechenleistung gibt es keine geeignete Vergleichsgröße. Jedoch besteht kein Unterschied, ob die CPU eine SP- oder DP-Berechnung durchführt, sodass die GFlops-Angaben auch die maximale Integer-Leistung abbilden[15]. Abbildung 8: Architekturvergleich CPU vs. GPU [Quelle: Eigene Darstellung, in Anlehnung an GPU Computing with CUDA, Göddeke, Dominik (2009)] 6.2 CPU vs. GPU Multi-Core-CPUs oder GPUs benötigen einen optimierten Ausführungscode. Das heißt, eine Anwendung muss so programmiert werden, dass Aufgaben in möglichst viele parallele Teilaufgaben aufgeteilt werden. Eine optimale Aufgabenstellung für die GPGPU-Technik ist eine, die schon von vornherein aus Hunderten von gleichförmigen Einzelberechnungen besteht, da sie im Vergleich zu einer CPU bis zu 50 Mal mehr Rechenwerke besitzt. Jede Gruppe wendet im Gleichtakt dasselbe Programm auf einen jeweils eigenen Strom von Daten an. Bei der Berechnung von Computergrafik werden stets größere Pixel-Gruppen nach einem gemeinsamen Schema berechnet, daher eignet sich diese Architektur optimal für diesen Einsatzzweck[16]. Rechenwerke auf CPU und GPU werden jeweils in SIMD-Einheiten (Single Instruction, Multiple Data) gruppiert, im Bereich der GPU wird der Begriff Stream-Prozessor angewendet, im CPU-Bereich SSE-Einheit. Wichtige Unterschiede zwischen den Architekturen von CPUs und GPUs spiegeln sich in der Cache- und Speicheranbindung wider. Beide Arten von Recheneinheiten beziehen Daten genau wie CPU-Kerne über (meistens zweistufige) Caches. Im Gegensatz zur CPU bietet der GPU-Cache jedoch keine Kohärenz, ist relativ klein, nur für lesenden Zugriff ausgelegt und auf 2-D-Datenfelder (wie Texturen) optimiert. Im Vergleich zur CPU geschieht der Zugriff auf den Grafikkarten-Speicher durch die GPU relativ ineffizient. Aus diesem Grund ist jeder SIMD-Gruppe lokaler Speicher für Daten und Zwischenergebnisse zugeordnet. CPUs besitzen Branch-Prediction und Instruction-Scheduler, um Daten vorausschauend bereitzustellen, diese Strategie fehlt der GPU. Aus diesem Grund entstehen in den SIMD-Einheiten Wartesituationen, da benötigte Daten noch nicht 6.1 Leistungskennzahlen[12][13][14] 11 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung eingelesen sind. Da Leerlauf in einem auf Leistung ausgelegten System keine Option ist, kann die SIMD auf einen vorbereiteten Thread schalten und die wartende Berechnung zurückstellen. Eine GPU-SIMD-Einheit verwaltet bis zu 1000 Threads, eine Quad-Core-CPU 8 Threads gleichzeitig. Durch das Shared-Memory-Konzept der GPU teilen sich alle aktiven Threads einer SIMD-Gruppe das Arbeitsregister. Müssen Daten nachgeladen werden, bricht die Performance stark ein.[17] 6.2.1 Hardwarevergleich Ein quantitativer Leistungsvergleich zwischen CPU und GPU ist sehr schwierig, denn die tatsächliche Performance hängt immer von der Auslastung der CPU/GPU durch die Anwendung ab. Selbst ein hochoptimierter Code erreicht nie eine hundertprozentige Auslastung des Rechenwerks. Aus diesem Grund basieren die folgenden Betrachtungen stets auf den theoretisch maximalen GFlops-Warten der Komponenten. Tabelle 1: Hardwarevergleich CPU vs. GPU Merkmal Ausprägung CPU (Consumer-Bereich) GPU (Consumer-Bereich) Beispiel Intel Core i7-975 Prozessoren Wenig Prozessoren 1 - 2, Viele Prozessoren 240, 1 1 Prozessor, 4 1 - 4 Kerne - 2 Kerne Kerne Taktung Hohe Taktung Niedrige Taktung Transistoren Speicher Niedrige Speicherzugriffszeiten (Latenz) Hoher Datendurchsatz (Speicherbandbreite) GFLOPS Besonderheiten Cache-Hierarchien NVIDIA Geforce GTX 280 1 GPUs, 240 Shader-Einheiten (MADD) 3.33 GHz pro Core 1.296 GHz (Shadertakt) 731 Millionen 1,48 Milliarden 3 × 2 GB DDR3-1600: 26.7 GB/s 1024 MB GDDR3: 138.4 GB/s 77 GFLOP/s 933 GFLOP/s GPU für datenparallelen Code optimiert Im Gegensatz zur CPU, welche auf kurze Latenzen ausgelegt ist, ist die GPU auf hohen Datendurchsatz optimiert. Bedingt durch den Einsatzzweck der GPU, ist die Architektur bereits auf massive parallele Datenverarbeitung ausgelegt[18]: • Task- und Daten-Parallelität • Parallele Vertexberechnung • Pixel(-Fragmente) parallel berechnen • Alle Berechnungen simultan 6.2 CPU vs. GPU 12 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 6.3 Technologien Der Begriff GPGPU bezeichnet vielmehr ein Konzept als eine konkrete Technologie. In diesem Kapitel werden Werkzeuge und Hardware vorgestellt, die GPGPU ermöglichen. 6.3.1 NVIDIA CUDA Bereits vor der Einführung von NVIDIA CUDA gab es Bemühungen in Richtung GPGPU, die Realisierung war allerdings vielen Beschränkungen unterworfen. Die Programmierung erfolgte umständlich und fehleranfällig über Grafik-APIs, Leistungsbeeinträchtigungen gab es durch das Modell gleichzeitiges Lesen exklusiver Schreibzugriff und keine Möglichkeit zur Lastverteilung. Es gab jedoch viele frühzeitige Anwender und Hardwarehersteller, die GPGPU als eine Marktchance entdeckten. Mit der Einführung von NVIDIA CUDA wurde erstmalig eine einheitliche Hard- und Software-Spezifikation für paralleles Rechnen geschaffen. Wichtige Designziele bei der Entwicklung von CUDA waren die Skalierbarkeit auf Hunderten von Kernen mit Tausenden Threads. CUDA-Programmierer können den Fokus auf die Entwicklung paralleler Algorithmen legen, und nicht auf die Mechanik einer parallelen Programmiersprache. CUDA soll heterogene Systeme ermöglichen, d.h. CPU zusammen mit einer GPU, obwohl diese auf unterschiedliche Speicherbausteine zugreifen[19]. 6.3.1.1 Hardware Konzept Abbildung 9: GPU: Thread Processing Cluster [Quelle: Eigene Darstellung, in Anlehnung an Advanced Parallel Processing Technologies: 8th International Symposium, Appt (2009), S. 153] Die von NVIDIA vorgestellte CUDA-Architektur (Compute Unified Device Architecture) macht Gebrauch von massenhaft ablaufgesteuerten Threads, wodurch die zur Verfügung stehenden Ressourcen effizient genutzt werden können. Der hohe Grad der Parallelisierung spiegelt sich auch im Hardware-Design einer solchen GPU wieder: Die GPU GT200, die z.B. in der Grafikkarte NVIDIA GeForce GTX 280 zum Einsatz kommt, besteht aus einem Thread-Verteiler, L2-Cache, mehreren Raster Operation Processor (ROP) sowie aus 10 Thread Processing Clustern (TPC). Ein TPC besteht aus 3 x 8 Stream-Prozessoren mit jeweils eigenem Speicher, gemeinsam 6.3 Technologien 13 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung genutzten Textur-Einheiten sowie einer Steuereinheit für den gesamten TPC. Aufaddiert besteht ein GT200-Kern also aus 240 Stream-Prozessoren, die zu je 24 Kernen 10 TPC bilden[20] Jeder Stream-Prozessor setzt sich aus acht Thread-Prozessoren für einfache Genauigkeit und einer Einheit für doppelte Genauigkeit (IEEE 754 floating point) zusammen.[21] 6.3.1.2 Begriffsdefinition Kernel Klassische Beispiele für datenparallele Probleme sind Bildbearbeitung, Simulation von physikalischen Modellen, wie z.B. Flüssigkeitsdynamik oder Finanzanalyse, sowie Such- oder Sortierfunktionen. Dabei handelt es sich um Arbeitsschritte, die komplexe Datenstrukturen, wie z.B. Bäume, assoziative Arrays, Linked Lists oder räumliche Datenstrukturen benötigen. Eine GPU kann jedoch nur eine gute Performance bieten, wenn Daten in einfachen Array-Strukturen vorliegen. Aus diesem Grund müssen diese Teile von Anwendungen identifiziert und für die GPGPU-Berechnung extrahiert werden. Diese Teilprogramme werden als Kernel bezeichnet[22]. 6.3.1.3 Abstraktion der Parallelisierung Von fundamentaler Bedeutung ist die Hierarchie von gleichzeitigen Threads, der Bereitstellung von sog. Lightweight Synchronisierungsprimitiven und ein Shared-Memory-Modell für die Kooperation der Threads. 6.3.1.4 Hierarchie gleichzeitiger Threads Der Grundgedanke besteht darin, Parallel-Kernel-Threads aus vielen Threads zusammenzusetzen, wobei jeder Thread dasselbe sequenzielle Programm ausführt. Mehrere Threads werden zu Thread-Blöcken zusammengefasst, sodass die Threads eines einzelnen Blocks kooperieren können. Jeder einzelne Thread sowie Thread-Block kann über eine eindeutige ID identifiziert und angesprochen werden. Ein Thread im klassischen Sinne wird unabhängig von anderen Threads ausgeführt, besitzt eigene Speicherregister, Prozessorzustände und hat keinen Einfluss auf die Thread-Planung[22]. Abbildung 10: GPGPU-Thread-Ausführungsmodell [Quelle: Eigene Darstellung, in Anlehnung an Kanter, David NVIDIA's GT200: Inside a Parallel Processor (2009)] Ein Thread-Block fungiert als virtualisierter Mulitcore-Prozessor, wodurch anfallende Daten und Berechnungen beliebig auf freie Prozessoren verteilt werden können. Ein Thread-Block ist ein (daten)paralleler Task, da alle 6.3.1.1 Hardware Konzept 14 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Blöcke im Kernel denselben Einstiegspunkt haben, jedoch einen unterschiedlichen Code ausführen können. Ein Thread-Block kann bei jedem Start durch den Kernel beliebig modifiziert werden. Die Unabhängigkeit der einzelnen Thread-Blocks muss durch den Programmierer gewährleistet sein, sodass die Ausführung eines Thread-Blocks nicht von den Ergebnissen eines anderen Blocks abhängig ist. Daraus lässt sich ableiten, dass ein Thread-Block so programmiert werden muss, dass er in jeder beliebigen Reihenfolge sowie gleichzeitig oder nacheinander ausgeführt werden kann. Zusätzlich gilt es zu beachten, dass Blöcke zwar koordiniert, aber nicht synchronisiert werden, da es sonst zu Deadlocks kommen kann. CUDA stellt zwei Arten von Threads zur Verfügung: Ein Thread kann physikalischer Natur sein, sodass er auf der NVIDIA-GPU ausgeführt wird. Ein virtueller Thread ist eigentlich ein Thread-Block, was einem physikalischen Thread auf einer virtualisierten Multicore-CPU entspricht 6.3.1.5 Ebenen der Parallelität Wie zuvor beschrieben, gibt es eine Parallelität auf der Ebene des Threads, da jeder Thread unabhängig ausgeführt wird. Datenparallelität innerhalb von Threads in einem Block und in Blöcken innerhalb eines Kernels wird durch ein Shared Memory-Konzept ermöglicht. Des Weiteren ermöglicht CUDA Task-Parallelität, da Blöcke innerhalb des Kernels sowie verschiedene Kernels untereinander unabhängig sind. 6.3.1.6 CUDA API Softwareseitig ist CUDA in zwei API-Level unterteilt: High-Level-API und Low-Level-API. Als High-Level gibt es die CUDA-Runtime-API, welche in diverse Programmiersprachen integrierbar ist. Beispielsweise bietet NVIDIA mit Styles C for CUDA eine Erweiterung der Programmiersprache C, die vor allem aus Funktions- und Variablenqualifizierern besteht[23]. 6.3.1.6.1 Funktions- und Variablenqualifizierer[23] Die folgenden Code-Listings zeigen die Definition einer CUDA-Funktion sowie den dazu passenden Aufruf. Es handelt sich um ein einfaches Beispiel zur Vektoraddition. Durch den Qualifizierer __global__ vor einer Funktionsdefinition markiert man diese als Kernelprogramm. Ein Kernelprogramm kann von der CPU aufgerufen werden und wird durch die GPU ausgeführt. Ein weiterer, hier nicht verwendeter Qualifizierer __device__. Eine so gekennzeichnete Funktion kann ausschließlich durch die GPU selber ausgeführt werden. Daraus resultiert, dass der Aufruf einer __device__ Funktion nur innerhalb eines 6.3.1.4 Hierarchie gleichzeitiger Threads 15 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung __global__ oder __device__ Blocks stehen kann. Der optionale Qualifizierer __host__ kennzeichnet eine Funktion, die durch die CPU aufgerufen werden kann, was jedoch auch impliziert wird, wenn kein anderer Qualifizierer angegeben wurde. Einige Einschränkungen sind zu beachten: __global__ oder __device__ können nicht rekursiv aufgerufen werden, die Anzahl der Parameter muss fest sein, und außerdem kann die Adresse dieser Funktion nicht ermittelt werden, da sie im globalen Grafikspeicher liegt. Ein Beispiel für einen Variablenqualifizierer ist __shared__. Hierdurch wird das Programm dazu angewiesen, den Variableninhalt im Shared Memory eines Streaming-Multiprozessors abzulegen. Bei den Variablen threadIdx, blockIdx und blockDim handelt es sich um spezielle CUDA-Variablen, um den Thread zu identifizieren. Nachfolgend ist der Funktionsaufruf durch das Hostprogramm, also durch die CPU, erklärt: Beim Aufruf einer Kernelfunktion muss die Ausführungskonfiguration <<<Blöcke,Threads>>> neben den eigentlichen Funktionsparametern d_A, d_B, d_C angegeben werden. Im vorigen Beispiel wird die Funktion vecAdd in N/256-Blöcken mit jeweils 265 Threads ausgeführt. Das vorherige Code-Listing ist nicht komplett, da beispielsweise Allokation von VRAM fehlt. 6.3.1.6.2 Weitere Funktionen Unterhalb dieser API-Schicht arbeitet die CUDA-Driver-API, welche wesentlich hardwarenäher arbeitet und Befehle der High-Level-API entsprechend umsetzt. Zusätzlich zu diesen Erweiterungen bietet CUDA noch Methoden für das Speichermanagement des VRAM. Über die Funktionen cudaMalloc, cudaFree und cudaMemcpy kann Speicher allokiert, freigegeben sowie vom VRAM ins RAM und visa verce kopiert werden[23]. Nachfolgend der komplette Host-Code, der benötigt wird, um das Kernelprogramm aufzurufen. 6.3.1.6.1 Funktions- und Variablenqualifizierer[23] 16 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Außerdem bietet CUDA eine eigene Mathematik-Library, welches folgende Funktionen bereitstellt: sinf, powf, atanf, ceil, min, sqrtf sowie Funktionen für Textur-Management und OpenGL und DirectX-Anbindung. Die Thread-Synchronisation erfolgt über die Funktion __syncthreads(). 6.3.1.6.3 CUDA-Compiler Um das Programm lauffähig zu machen, wird ein spezieller CUDA-Compiler benötigt. Im ersten Schritt wird der allgemeine, CPU-spezifische Code extrahiert und an den Standardcompiler übergeben. Der GPU-spezifische Code wird durch den CUDA-Compiler in die Zwischensprache PTX übersetzt. PTX ähnelt einer Assemblersprache und kann daher benutzt werden, um den generierten Quellcode auf mögliche Ineffizienzen hin zu analysieren. Im letzten Schritt wird der PTX-Bytecode in PTX in den GPU-spezifischen Low Level Code umgewandelt, der dann auf der GPU ausgeführt werden kann[23]. 6.3.2 NVIDIA Tesla Für den professionellen Einsatz bietet NVIDIA unter dem Markennamen Tesla spezielle Workstations und GPUs, die für GPGPU in wissenschaftlichen Umgebungen optimiert sind.[24] 6.3.3 ATI Stream ATI Stream ist die Weiterentwicklung der von AMD entworfenen Programmiersprache CTM. Es handelt sich um eine GPGPU-Schnittstelle, jedoch liegt der Fokus auf Transkodierung und Videobeschleunigung[25]. 6.3.1.6.2 Weitere Funktionen 17 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 6.3.4 OpenGL OpenGL dient als Sonderlösung für alte GPUs, die das Shader Model 4.0 nicht unterstützen und daher inkompatibel zu CUDA sind. Die Shader werden durch die Low Level API OpenGL angesprochen und laufen daher nur auf speziellen Plattformen. GPGPU zielt jedoch auf universellen Einsatz ab, daher fließt diese Möglichkeit nicht mit in die Betrachtung ein. 6.3.5 OpenCL 1.0 Neben den herstellerspezifischen Lösungen NVIDIA CUDA und ATI Stream gibt es mit OpenCL 1.0 die Spezifikation einer offenen Compute-Language. Das von der Khronos Group erstellte Konzept hat diverse kommerzielle Ziele, die die Verbreitung von GPGPU unterstützen sollen. Firmen wie AMD, Apple, Intel, IBM, NVIDIA, Qualcomm, Samsung und Texas Instruments partizipieren an der OpenCL-Entwicklung, um einige branchenführende Unternehmen und Institutionen zu nennen[26]. 6.3.5.1 Spezifikation OpenCL 1.0 richtet sich an Hardware-Anbieter und -Entwickler und eignet sich für den Einsatz in Middleware, Tools und Anwendungen. Zu den unterstützten Plattformen/Systemen zählen CPU, GPU, Sony Cell Processor und DSP (Digital signal processor), die als heterogenes System arbeiten sollen. Ein wichtiger Punkt ist die Herstellerunabhängigkeit sowie der Einsatz auf der neuesten Generation von GPU-Hardware, um einen schnellen Markteinstieg zu ermöglichen. Ähnlich wie CUDA setzten die Entwickler von OpenCL auf ein daten- und taskparalleles Modell. Ein Vorteil gegenüber anderen GPGPU-Technologien wird mit der nummerischen Genauigkeit und Präzision gemäß IEEE 754 gewährleistet. OpenCL ist eine Erweiterung der Sprache C, es bietet auch experimentelle Unterstützung für die Sprache C++. Die eigentliche Entwicklung durchläuft einen ähnlichen Zyklus wie bei der CUDA-Entwicklung[27]: • Identifikation von leistungsintensivsten Programmteilen • Umschreiben der betroffenen Programmteile mithilfe OpenCL C als Kernelprogramm • Zwischen CPU- und GPU-Code differenzierte Kompilierung 6.3.5.2 Praxis Mit ATI Stream Software Development Kit v2.0 bietet AMD OpenCL zertifizierte Unterstützung [28] die sowohl CPU als auch GPU ansprechen kann. Für NVIDIA-Hardware gibt es zum jetzigen Zeitpunkt nur die Möglichkeit, OpenCL auf der GPU auszuführen. Aufgrund der Unabhängigkeit von OpenCL ist es jedoch nur nötig, das Programm einmal zu entwickeln. NVIDIA muss einen entsprechenden Treiberunterbau zur Verfügung stellen, um volle OpenCL-Kompatibilität zu erreichen. Apple setzt im Betriebssystem Mac OS X Snow Leopard OpenCL 1.0 ein, um die Leistung von GPUs für allgemeine Prozesse zur Verfügung stellen zu können. 6.3.4 OpenGL 18 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 6.3.6 DirectX 11 Direct Compute Ähnlich wie bei der OpenCL-Spezifikation hat Microsoft das Bestreben, GPGPU zugänglicher zu machen und führt mit Version DirectX 11 sogenannte Compute Shaders ein. 7 Anwendungen Nachfolgend wird der praktische Einsatz von GPGPU anhand von Beispielen erläutert. 7.1 Sicherheit Die Sicherheit von komplexen kryptografischen Algorithmen, die Daten verschlüsseln oder den Zugriff auf geschützte Systeme regeln, basiert lediglich auf der Tatsache, dass das zufällige Erraten eines Passwortes höchst unwahrscheinlich wird oder extrem viel Rechenleistung und Zeit benötigt. Mit Bruteforce-Attacken wird versucht, durch stumpfes Durchtesten von Schlüsselkombinationen an ein Passwort heranzukommen, daher profitiert diese Art der Attacke von einer hohen Rechenleistung. Einige Kryptoverfahren gelten nur deshalb noch als sicher, weil bezahlbare Rechner bisher nicht genügend Performance hatten, um sie in sinnvoller Zeit zu ?knacken?. Mithilfe der GPGPU-Unterstützung gelingt es der kommerziellen Software Distributed Password Recovery der Firma ELCOM, Passwörter von geschützten Dokumenten wie beispielsweise Excel, Word oder PDF herauszufinden oder die Sicherheit von WPA/WPA2-geschützten WLAN-Netzen auszuhebeln[29]. Das Freeware-Tool BarsWF ermöglicht es, den Klartext eines MD5-Hashes mithilfe einer GPGPU-beschleunigten Bruteforce-Attacke zu ermitteln. Als Klartext-String wurde das Wort winfwiki verwendet, der resultierende MD5-Hash ist f68626fbcb89da7f9b3c0ef7cabf3eea Für einen Performance-Vergleich wurde das Programm auf den folgenden Computersystemen ausgeführt: System 1 - GPGPU Berechnung • CPU: AMD Athlon 64 3500+ • RAM: 2GB Dual Channel PC 3200 DDR • GPU: NVIDIA GeForce 8800 GT 512 MB (G92 Chip, 112 Stream-Prozessoren) • OS : Windows 7 Professional 64 Bit Abbildung 14: System 1 Screenshot BarsWF_CUDA_x64 MD5 Crack System 2 ? CPU-Berechnung • CPU: Intel Core 2 Duo E8500 6.3.6 DirectX 11 Direct Compute 19 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung • RAM: 3,5 GB Dual Channel PC 3200 DDR2 • GPU: NVIDIA GeForce 6600 GT (NV45 Chip; keine Relevanz, da CPU-Berechnung) • OS : Windows XP Professional 32 Bit Abbildung 15: System 2 Screenshot BarsWF_CUDA_x64 MD5 Crack Der String winfwiki konnte mithilfe der GPGPU-Unterstützung innerhalb von 4 Minuten 20 Sekunden erraten werden. Hier ist zu beachten, dass MD5 nicht mehr als sicherer Algorithmus gilt und das gewählte Passwort aufgrund der Länge unsicher ist und da es weder eine Kombination aus Klein- und Großbuchstaben noch Zahlen oder Sonderzeichen enthält. Zusätzlich gilt MD5 als nicht sichere Hashfunktion, da ein konstanter Schlüssel mit einer Länge von unter 128 Bit erzeugt wird[30]. Abbildung 17: Screenshot BarsWF_CUDA_x64 MD5 Crack - erledigt Bei der Verwendung eines Passwortes mit einer Länge von 15 Zeichen und einer Kombination aus Klein- und Großbuchstaben verlängert sich die voraussichtliche Zeit bereits auf über einen Tag. Auf System 1 liegt der Anteil der von GPU berechneten Hashes pro Sekunde im Durchschnitt bei 410 Millionen Hashes pro Sekunde, die CPU errechnet ca. 14 Millionen Hashes pro Sekunde. Hierbei ist zu beachten, dass es sich bei der CPU AMD Athlon 64 um ein älteres Modell handelt, welches verglichen mit aktuellen Prozessoren nur halb so leistungsfähige SSE-Einheiten besitzt. 7.1 Sicherheit 20 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung System 2 errechnet pro Kern ca. 52 Millionen Hashes pro Sekunde und unter Nutzung beider Kerne im Durchschnitt ca. 96 Millionen Hashes pro Sekunde. 7.1.1 Auswirkungen auf die Sicherheit Durch GPGPU-Computing gelingt es Privatpersonen, in Leistungsbereiche vorzudringen, die zuvor nur mit millionenschweren Supercomputern zugänglich waren. Kommerzielle Produkte wie ElcomSoft Distributed Password Recovery erlauben es, diverse Passwortschutz-Funktionen zu durchbrechen. Dazu zählen beispielsweise PGP Disks, LM/NTLM-Anmeldungspasswörter oder WPA- und WPA2-Passwörter. Der Hersteller spricht von "Leistungsstark? verteilte Passwort-Wiederherstellung", jedoch sind auch andere Einsatzzwecke denkbar[31]. Die Anwendung skaliert auf bis zu 10.000 Arbeitsstationen, wobei jeder Computer 64 CPUs oder Prozessorkerne sowie bis zu 32 GPUs besitzen kann, wodurch eine extreme Rechenleistung erreicht werden kann. In diesem Fall sind die Kosten natürlich nicht zu vernachlässigen, daher ist diese Möglichkeit für Privatanwender eher nicht in Betracht zu ziehen. Einen ähnlichen Ansatz verfolgt der Dienst WPA Cracker [32]. Dieser stellt einen Cloud Computing zur Verfügung, der darauf spezialisiert ist, aus einem Mitschnitt des WLAN-Verkehrs den WPA-PSK oder WPA2 Schlüssel zu ermitteln. Laut Betreiber wird der Prozess derzeit auf 400 CPUs durchgeführt und benötigt im Schnitt 20 Minuten, der Preis liegt bei $17. Eine Garantie zum Ermitteln des Schlüssels ist jedoch nicht gegeben, da der Einsatz auf einer Dictonary Attack basiert[33]. Der Dienst WPA Cracker benutzt keine GPGPU Berechnung, jedoch zeigen die beiden Beispiele dass in diesem Bereich durchaus kommerzielles Interesse besteht und scheinbar auch genutzt wird. Sofern unsichere kryptografische Algorithmen[34] verwendet werden, ist ein Umdenken erforderlich. Die Prämisse, dass die Sicherheit eines unsicheren Algorithmus durch ausreichende Komplexität des Schlüssels komplementiert wird, gilt aufgrund der für die breite Öffentlichkeit theoretisch zur Verfügung stehenden Rechenleistung nur noch bedingt. Wird ein effektive Schlüssellänge von unter 60 Bit in symmetrischen Verschlüsselungsverfahren benutzt, gilt die Verschlüsselung als unsicher, da sie so heute mit moderatem Rechnereinsatz durch Ausprobieren aller potenziell möglichen Schlüssel aufgelöst werden kann. Durch den technologischen Fortschritt liegt diese Grenze in Zukunft bei 100 Bit[30]. Bei Algorithmen symmetrischer Verschlüsselungs- und Signaturverfahren liegt die Grenze bei 1024 Bit, denn die Sicherheit basiert auf dem Problem des Faktorisierens großer Zahlen. Begründet ist diese Unsicherheit durch die Entwicklung effizienter Faktorisierungsalgorithmen und der Möglichkeit, 500-Bit-Zahlen zu faktorisieren[30]. Des Weiteren gelten Hashfunktionen, die eine beliebig lange Zeichenkette auf einen Hashwert mit konstanter Bitlänge unter 128 Bit abbilden, als unsicher. Die Begründung basiert auf der Tatsache, dass sonst zwei Zeichenketten ermittelt werden können, die den gleichen Hashwert ergeben[30]. Ein betroffenes Verfahren ist die benutzte Verschlüsselung für Geldautomaten, die auf dem häufig eingesetzten DES-Algorithmus zur symmetrischen Verschlüsselung basiert. Hier liegt die effektive Schlüssellänge bei nur 56 Bit und damit unter der Grenze für symmetrische Verschlüsselungsverfahren. Die Weiterentwicklung Triple-DES kann momentan aufgrund einer Schlüssellänge von 112 Bit als noch sicher bezeichnet werden. 7.1.1 Auswirkungen auf die Sicherheit 21 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Als unsicher gilt ein asymmetrisches Verfahren unter Verwendung des RSA-Algorithmus, dem das Faktorisierungsproblem als Basis dient, sofern die Schlüssellänge unter 768 Bit liegt. Das Bundesamt für Sicherheit in der Informationstechnik prognostiziert eine Schlüssellänge von 1024 Bit noch als ausreichend für die nächsten Jahre. 7.2 Spiele[35] Physikberechnungen innerhalb von Computerspielen zählen zu einer sehr leistungsintensiven Aufgabe für die CPU, daher war die Anzahl simulierbarer Objekte auf ca. 10 bis 200 beschränkt. Um den Hauptprozessor zu entlasten, veröffentlichte die Firma AGEIA einen speziellen Physikprozessor PPU (Physics Processing Unit), der in Form einer zusätzlichen PCI-Express-Karte erworben werden konnte. AGEIA wurde im Jahre 2008 von NVIDIA akquiriert und die PhysX-Berechnung mithilfe von CUDA auf die GPU verlagert. Sofern in der entsprechenden Anwendung das PhysX SDK benutzt wurde, ermöglicht die dedizierte PPU Szenen mit 32.000 und eine entsprechende GPU mit 64.000 Objekten. Anwender ohne entsprechende Hardware können die Spiele trotzdem nutzen, jedoch mit eingeschränkten Physikeffekten. Aufgrund der Herstellerbindung an NVIDIA-Karten konnte sich PhysX bis jetzt nicht auf dem PC durchsetzten, der Einsatz in Spielen beeinflusst daher nicht den Spielablauf, sondern nur die Optik. 7.3 Wissenschaft Wie bereits in Abschnitt [36] erwähnt, eignet sich GPGPU besonders für wissenschaftliche Anwendungen, da die Problemstellung bereits eine datenparallele Verarbeitung voraussetzt 7.3.1 Folding@Home Folding@Home ist eine Distributed-Computing-Anwendung der Stanford University zur Simulation der Faltung von Proteinen. Die komplexen Berechnungen würden laut der Stanford University auf einem einzelnen Rechner Jahrzehnte brauchen, daher nutzt man die Rechenleistung von vielen freiwilligen Teilnehmern. Anfang 2009 lag die Zahl der Teilnehmer bei ca. 250.000 aktiven CPUs, zum jetzigen Zeitpunkt (Thu, 24 Dec 2009 08:28:42) gibt es 255.428 aktive und 3.654.059 CPUs insgesamt. Ein "High Performance Client" von Folding@Home benutzt die GPGPU Berechnung und lässt sich auf ATI und NVIDIA Hardware ausführen, eine Version für die Spielekonsole Sony Playstation 3 ist auch vorhanden.[37] 7.2 Spiele[35] 22 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Zurzeit gibt es 68.224 aktive und 1.163.483 verfügbare GPGPU-Clients. Wie in Abbildung 18 und Abbildung 19 deutlich zu erkennen ist, übersteigt die Leistung der GPGPU-Berechnung die der CPU-Berechnung um einen signifikanten Anteil, obwohl die Anzahl der Clients deutlich geringer ist. 7.4 Multimedia Die GPU kann den Prozessor beim Abspielen von HD-Inhalten (High Definition) entlasten. 7.5 Transkodierung "Die stürmische Fortentwicklung der Halbleitertechnik hat PCs Quad-Core-Prozessoren sowie Grafikchips mit 240 Recheneinheiten und über einer Milliarde Transistoren beschert. Wer [...] beispielsweise ein HDVideo transcodieren möchte, wartet noch immer stundenlang auf das Ergebnis."[38] Mit dem Programm Badaboom von Elemental Technologies lassen sich Filme in MPEG-4 AVC in einen MP4-Container mit AAC-Tonspur konvertieren.[39] Mit einer 64-Shader-Einheit einer NVIDIA GeForce GTX 285 läuft der Transkodierungsvorgang mit ca. 29 Bildern pro Sekunde, was in etwa einer Echtzeitkodierung entspricht[39]. 7.3.1 Folding@Home 23 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 8 Schlussbetrachtung GPGPU hat in den letzten Jahren an Popularität zugenommen. Ein Nachteil ist die zurzeit bestehende Inkompatibilität zwischen zwei konkurrierenden Technologien: NVIDIA CUDA und ATI Stream. Des Weiteren entsteht durch die Neuausrichtung bestehender Programme auf GPGPU Entwicklungsaufwand, jedoch wächst die Anzahl GPU-optimierter Programme stetig. Die Akzeptanz von GPGPU, speziell durch NVIDIA CUDA, ist hoch. Es gibt zum jetzigen Zeitpunkt bereits über 50 Universitäten, die spezielle Kurse in CUDA-Programmierung anbieten, ungefähr 25.000 aktive CUDA-Entwickler und 100 Millionen CUDA-fähige Grafikkarten[40]. 8.1 Wirtschaftlichkeit GPGPU im wissenschaftlichen Umfeld ermöglicht enorme Kosteneinsparungen, da die Leistung einer Tesla-Workstation pro $/? und Watt wesentlich höher ist als die eines klassischen Supercomputer-Clusters[41]. CalcUA-Supercompuer (University of Antwerp, Belgien): • ~ 5 Millionen Dollar • 256 AMD dual-core Opterons Tesla-Workstation: • ~ 10.000 Dollar • 4 Tesla C1060 GPUs Die oben genannten Angaben stammen aus NVIDIA-Whitepapers und sind theoretischer Natur, da GPGPU noch nicht massentauglich ist. 8 Schlussbetrachtung 24 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 8.2 Praktischer Einsatz Die Leistung einer GPGPU-Anwendung hängt zu großen Teilen von der technischen Umsetzung durch die Software-Entwickler ab. Um eine gute Anwendungsperformance zu erreichen, müssen Programmierer lernen, diese auf Durchsatz optimierte Stream-Architektur effizient zu nutzen.[42] In Abbildung 21 ist die Performance der Speicheranbindung unter verschiedenen Szenarien dargestellt. Wie bereits in Kapitel 6.1 Leistungskennzahlen erläutert, ist eine GPGPU-Berechnung nur schnell, wenn Daten bereits vorbereitet sind und nicht nachgeladen werden müssen. Das Diagramm zeigt, wie sehr die Performance beim ständigen bzw. zufälligen Nachladen von Daten einbricht. 8.2.1 Verbreitung Die noch geringe Anzahl der Multi-Core-CPU-fähigen Anwendungen zeigt, dass es sich bei der Optimierung um einen aufwändigen Prozess handelt, zu dem noch nicht jedes Unternehmen bereit ist. Andererseits erlauben bereits Grafikkarten im 100-?-Segment, GPGPU-Features im Entertainment- und Konsumerbereich zu nutzen. Die Leistung einer solchen Karte liegt bei ca. 1 Milliarden TFlops, was ungefähr der zehnfachen Rechenleistung eines Intel-Vierkern-Prozessors entspricht[43]. Im Kontrast dazu ist eine CPU in diesem Preissegment erhältlich und für deutlich mehr Anwendungen nutzbar[39]. Ein Problem stellt noch der universelle Einsatz von GPGPU dar. NVIDIA CUDA ist in der Entwicklung recht weit fortgeschritten, jedoch wird logischerweise nur NVIDIA-Grafikhardware unterstützt. OpenCL zeigt, in welche Richtung GPGPU sich entwickeln muss: universeller Einsatz unabhängig von der eingesetzten Hardware. Zum jetzigen Zeitpunkt ist die Entwicklung von OpenCL jedoch noch nicht so weit fortgeschritten, um NVIDIA CUDA ersetzen zu können. 8.2.2 Sicherheit Wie sich gezeigt hat, bietet die GPGPU-Technologie bereits die Möglichkeit, Sicherheitsmechanismen auszuhebeln. Bei der Entwicklung von Systemen und Anwendungen sollte die Tatsache der theoretischen Rechenleistung durch GPGPU im Hinterkopf behalten und möglichst auf sichere Algorithmen gesetzt werden. 8.2 Praktischer Einsatz 25 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Andererseits kann GPGPU natürlich dazu benutzt werden, um neue, bessere Sicherheitsmechanismen zu entwickeln. Ein existierendes Beispiel ist die PGP-Verschlüsselung mithilfe der GPU. 8.3 Fazit Obwohl ATI mit STREAM im Multimedia-Bereich und vor allem NVIDIA mit CUDA gute Erfolge erreichzielt hat, geht die Entwicklung in die falsche Richtung, da es sich um untereinander inkompatible, herstellerspezifische Lösungen handelt. Für die zukünftige technologische Entwicklung sind die gewonnene Methodenkompetenz, das Fachwissen sowie die allgemeine Akzeptanz bzw. Präsenz von GPGPU wichtige Punkte. Mit der endgültigen Spezifikation und Umsetzung von OpenCL sowie DirectX 11 Direct Compute besteht die Chance, eine einheitliche Basis für GPGPU zu schaffen. OpenCL hat das kommerzielle Ziel, GPGPU am Markt zu etablieren. Zum jetzigen Zeitpunkt haben CPU und GPU noch eine Existenzberechtigung als explizite Einzelkomponenten, da die Einsatzgebiete der GPU noch relativ speziell sind. Die Anzahl echter GPGPU-Applikationen für Desktop-Rechner ist noch winzig, viele Anwendungen setzen nur in sehr kleinen Bereichen auf GPGPU[39]. Auch hier hat OpenCL eine Schlüsselposition, da konsistente nummerische Präzision und Genauigkeit gewährleistet wird, die bisher nicht vorhanden war. Außerdem gibt es Bestrebungen der Chiphersteller, eine Symbiose beider Komponenten zu erreichen, um die Vorteile beider Architekturen zu vereinen. Als Beispiel kann der Intel Intels Larrabee-Chip genannt werden. Dieser soll zwar wie ein Grafik-Chip funktionieren, aber auch als x86-ähnlicher Applikationsbeschleuniger[39]. Das kommerzielle Erscheinen von Larrabee in dieser Form wurde von Intel zurückgezogen, jedoch dient die Plattform für zukünftige Entwicklungen. 9 Fußnoten 1. ? PC-Hardwarebuch.: Aufbau, Funktionsweise, Programmierung. Von Hans-Peter Messmer, Klaus Dembowski 2. ? Vgl. Mikrocontroller und Mikroprozessoren, Springer, 2007 3. ? Vgl. Innovationspotenziale in der Produktentwicklung, Hanser Fachbuchverlag (2007) S.229 f 4. ? 4,0 4,1 4,2 Vgl. NVIDIA Cuda: Das Ende der CPU? 2009 5. ? Vgl. Game over!?: Perspektiven des Computerspiels (2008) S. 46 6. ? Vgl. Wirtschaftsinformatik: Nachschlagewerk für Studium und Praxis, Gabler, 2006 7. ? Vgl. NVIDIA (2008) Programmable Vertex Shaders 8. ? NVIDIA (2008) Programmable Pixel Shaders 9. ? Vgl. Computerlexikon 2010: Die ganze digitale Welt zum Nachschlagen, Markt und Technik (2009) 10. ? Vgl. NVIDIA (2008) Programmable Vertex Shaders 11. ? NVIDIA (2008) Programmable Pixel Shaders 12. ? Vgl. Windeck, Christof (2009) Supercomputer zu Hause, In: c?t Nr. 07 13. ? Vgl. Stiller, Andreas (2008) Die Säulen des Nehalem, Die Core-Architektur des neuen Intel-Prozessors,In: c?t 25/08, S. 174 14. ? Vgl. Stiller, Andreas (2007) Parade der Quadrigen, AMDs Barcelona-Architektur im Vergleich zum alten Opteron K8 und Intel Core, c?t 20/07, S. 170 15. ? 15,0 15,1 15,2 Vgl. Chips nach Wahl, Windeck Christof, in cŽt Nr. 25 S.98 2009 16. ? Grafikkarten-Architektur, WWU Müsnster (Hrsg.)(2009) 8.2.2 Sicherheit 26 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung 17. ? GPU Gems 2 - Part IV: Programming Techniques for High-Performance Graphics and General-Purpose Computation, Addison-Wesley Professional (2005), Pharr, Matt, Fernando, Randima et al. (2005) 18. ? GPGPU Computing - ein Überblick für Anfänger und Fortgeschrittene, Planet 3DNow! (2009) 19. ? Nvidia Cuda: Das Ende der CPU? Kraft, Benjamin, van Winkle, William (2008) 20. ? Advanced Parallel Processing Technologies: 8th International Symposium, Appt 2009, S. 153 f 21. ? Vgl. High Performance Embedded Architectures and Compilers: First International Conference, Springer, Berlin (2005) 22. ? 22,0 22,1 Vgl. NVIDIA's GT200: Inside a Parallel Processor, Kanter, David (2009) 23. ? 23,0 23,1 23,2 23,3 Vgl. Workshop on High Performance GPU Computing with NVIDIA CUDA, School of Computer Science and Engineering(2009) 24. ? Workshop on High Performance GPU Computing with NVIDIA CUDA, School of Computer Science and Engineering (2009) 25. ? Vgl. ATI Stream: Der CUDA-Konkurrent Kraft, Benjamin, van Winkle, William (2009) 26. ? OpenCL, Khronos (Hrsg.)(2009) 27. ? OpenCL, Khronos (Hrsg.)(2009) 28. ? ATI Stream SDK v2.0, AMD (2009) 29. ? Leistungsstark? verteilte Passwort-Wiederherstellung, Elcom Software (2009) 30. ? 30,0 30,1 30,2 30,3 Vgl. G 4.35 Unsichere kryptographische Algorithmen, BSI 31. ? Vgl. Elcom Software (2009) Leistungsstark? verteilte Passwort-Wiederherstellung 32. ? siehe http://www.wpacracker.com/index.html 33. ? Vgl. Cloud-Dienst knackt WLAN-Passwörter, Heise.de (2009) 34. ? Vgl. G 4.35 Unsichere kryptographische Algorithmen, BSI 35. ? Augenschmauß, GPU-beschleunigte Physikeffekte mit Nvidias PhysX. In: c?t Nr. 13 2009, S. 75 ff 36. ? Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung#Begriffsdefinition Kernel 37. ? Folding@Home, Stanford University (2009) 38. ? Windeck, Christof (2009) Supercomputer zu Hause, In: c?t Nr. 07 Seite 89 39. ? 39,0 39,1 39,2 39,3 39,4 Windeck, Christof (2009) Supercomputer zu Hause, In: c?t Nr. 07 Seite 89 40. ? CUDA Zone-Wissenswertes über CUDA, NVIDIA (Hrsg.)(2009) 41. ? Workshop on High Performance GPU Computing with NVIDIA CUDA, Harris, Mark (2009) 42. ? Vgl. Windeck, Christof (2009) Supercomputer zu Hause, In: c?t Nr. 07 43. ? Vgl. Chips nach Wahl, Windeck Christof, in cŽt Nr. 25 S.98 2009 10 Literatur- und Quellenverzeichnis Monografien Bertels, Koen, Dimopoulos, Embedded Computer Systems: Architectures, Modeling, and Simulation: 9th Nikitas et al. (Hrsg.)(2009) International Workshop, Springer, Berlin; Auflage: 1 (2009) Brinkschulte, Uwe et. al (2007) Mikrocontroller und Mikroprozessoren, Springer, 2007 Conte, Tom, Navarro, Nacho et al. High Performance Embedded Architectures and Compilers: First (2005) International Conference, Springer, Berlin (2005) Distelmeyer, Jan, Hanke, Christine, Game over!?: Perspektiven des Computerspiels, transcript, 2008 Mersch, Dieter (Hrsg.)(2008) Lassmann, Wolfgang Wirtschaftsinformatik: Nachschlagwerk für Studium und Praxis, Gabler, (Hrsg.)(2006) Auflage: 1 (2006) Krause, Frank-Lothar Innovationspotenziale in der Produktentwicklung, Hanser Fachbuchverlag, (Hrsg.)(2007) Auflage: 1 (2007) 9 Fußnoten 27 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Pharr, Matt, Fernando, Randima et GPU Gems 2 - Part IV: Programming Techniques for High-Performance al. (2005) Graphics and General-Purpose Computation, Addison-Wesley Professional (2005) Computerlexikon 2010: Die ganze digitale Welt zum Nachschlagen, Markt Winkler, Peter (2009) und Technik, Auflage: 1 2009 Fachzeitschriften Fischer, Martin (2009) Stiller, Andreas (2008) Stiller, Andreas (2007) Windeck, Christof (2009) Windeck, Christof (2009) Internet-Quellen Augenschmauß, GPU-beschleunigte Physikeffekte mit Nvidias PhysX. In: c?t Nr. 13 2009, S. 75 ff Die Säulen des Nehalem, Die Core-Architektur des neuen Intel-Prozessors,In: c?t 25/08, S. 174 Parade der Quadrigen, AMDs Barcelona-Architektur im Vergleich zum alten Opteron K8 und Intel Core, c?t 20/07, S. 170 Chips nach Wahl, In: c?t Nr. 25 Supercomputer zu Hause, In: c?t Nr. 07 3DChip 3DChip Das Grafikkartenmuseum, (Hrsg.)(2008) http://www.3dchip.de/Grafikkartenmodds/Grafikkartenmuseum.php 04.11.2009, 11:53 G 4.35 Unsichere kryptographische Algorithmen, BSI https://www.bsi.bund.de/ContentBSI/grundschutz/kataloge/g/g04/g04035.html, 01.11.2009, 14:30 Elcom Leistungsstark? verteilte Passwort-Wiederherstellung,http://www.elcomsoft.de/edpr.html, 04.11.2009, Software 11:04 (2009) Fatahalian, K. Sugerman, J. Understanding the Efficiency of GPU Algorithms for Matrix-Matrix Multiplication, Hanrahan, P. http://www-graphics.stanford.edu/papers/gpumatrixmult/gpumatrixmult.pdf (2004) Göddeke, Dominik, TU CUDA Workshop, http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/cuda-2009/ Dortmund 06.12.2009, 14:03 (Hrsg.) (2009) Heise.de Supercomputer zu Hause, http://www.heise.de/ct/artikel/Supercomputer-zu-Hause-291944.html, (Hrsg.)(2009) 04.11.2009, 10:40 Heise.de Cloud-Dienst knackt WLAN-Passwörter, (Hrsg.)(2009) http://www.heise.de/newsticker/meldung/Cloud-Dienst-knackt-WLAN-Passwoerter-879888.html Kanter, David NVIDIA's GT200: Inside a Parallel Processor, (2009) http://www.realworldtech.com/page.cfm?ArticleID=RWT090808195242&p=1, 01.11.2009, 14:30 Kraft, Benjamin, van ATI Stream: Der CUDA-Konkurrent, Winkle, http://www.tomshardware.com/de/ATi-Stream-AMD-gpgpu,testberichte-240350.html 12.12.2009, William 11:12 (2009) Kraft, Nvidia Cuda: Das Ende der CPU? , Benjamin, van http://www.tomshardware.com/de/CUDA-Nvidia-CPU-GPU,testberichte-240065.html 12.12.2009, 10 Literatur- und Quellenverzeichnis 28 Einfluss_der_GPGPU_auf_die_zukünftige_technologische_Entwicklung Winkle, William (2008) NVIDIA (Hrsg.)(2009) Planet 3DNow! (2009) School of Computer Science and Engineering (Hrsg.)(2009) Stanford University (Hrsg.)(2009) WWU Müsnster (Hrsg.)(2009) Whitepapers 11:12 CUDA Zone-Wissenswertes über CUDA, http://www.nvidia.de/object/cuda_what_is_de.html/ 01.11.2009, 14:30 GPGPU Computing - ein Überblick für Anfänger und Fortgeschrittene, http://www.planet3dnow.de/vbulletin/showthread.php?t=362621, 01.11.2009, 14:30 Workshop on High Performance GPU Computing with NVIDIA CUDA, http://www.cse.unsw.edu.au/~pls/cuda-workshop09/ 06.12.2009, 15:43 Folding@Home, http://fah-web.stanford.edu/cgi-bin/main.py?qtype=osstats Grafikkarten-Architektur, http://wwwmath.uni-muenster.de/num/Vorlesungen/CUDA-2009/sebastian_albers-grafikhardware.pdf 22.11.2009, 18:24 ATI Stream SDK v2.0, http://developer.amd.com/GPU/ATISTREAMSDK/Pages/default.aspx, 15.11.2009, 13:10 PENTIUM® PROCESSOR 75/90/100/120/133/150/166/200, Intel http://download.intel.com/design/pentium/datashts/24199710.pdf, 08.11.2009, 17:58 Khronos (2009) OpenCL, http://www.khronos.org/opencl/ 01.12.2009, 09:31 NVIDIA(2008) Programmable Vertex Shaders, http://www.nvidia.de/attach/356 22.11.2009, 19:37 NVIDIA(2008) Programmable Pixel Shaders, http://www.nvidia.de/attach/351 22.11.2009, 19:40 AMD (2009) 10 Literatur- und Quellenverzeichnis 29