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