Open Source im professionellen Einsatz

GPU-Computing mit dem neuen Nvidia CUDA

Der Leih-Euler

Moderne Grafikchips mir ihren vielfach parallelen Ausführungseinheiten rechnen on Board ungleich schneller als die Numerik-Einheiten aktueller CPUs. Für die neuesten Nvidia-Karten ist jetzt ein SDK für C-Programme erschienen, das die GPU als Rechenknecht beschäftigt.

Inhalt

94 | Design Patterns Facade und Mono vereinheitlichen die Datenbankentwicklung.

98 | Perl-Snapshot Michael Schilli steuert per Ajax-Webinterface und X10-Protokoll beliebige Geräte.

Weitere Programmier-Artikel stehen im Eclipse-Schwerpunkt ab Seite 31.

Wer dicke Lüfter auf modernen Grafikkarten und deren Geräuschpegel bisher für Show gehalten hat, sollte die Spezifikationen der verbauten Chips beachten: Aktuelle Modelle sind zwar etwas langsamer getaktet als normale CPUs, spielen aber mit rund 100 bis 300 Millionen Transistoren in 90-Nanometer-Technologie in derselben Liga wie neue CPUs [1]. Außerdem binden ATI (gehört mittlerweile zu AMD) und Nvidia den Grafikkartenspeicher sehr schnell an.

Den größten Performancegewinn erzielen die Grafikprozessoren (GPUs) jedoch durch ihre interne Struktur: Ihre Shader-Engines sind nämlich auf paralleles Rechnen mit Gleikommazahlen optimiert. Einsteiger-Karten verarbeiten auf diese Weise Duzende, Highend-Karten bis zu 512 Threads zeitgleich. Das Ganze dient natürlich primär dem Ziel, die Szenen in 3D-Spielen fließend und zugleich photorealistisch zu rendern. Zugleich legt die schiere Leistung der Chips die Idee nahe, das vorhandene Silizium als Coprozessor für normale leistungshungrige Applikationen zu nutzen.

Das seit 2000 an der Universität Stanford laufende Verteiltes-Rechnen-Projekt Folding@Home, das die Protein-Faltung und die damit zusammenhängenden Krankheiten wie Alzheimer und Parkinson erforscht [2], bietet seit 2006 für ATI-X1900-Karten auch einen GPU-Client [3] zum Download. Der rechnet 20- bis 30-mal schneller als ein Client für normale CPUs, funktioniert aber leider nur mit Windows XP und Vista.

Solches "General-Purpose Computation on GPUs" ist bisher selten, weil die Streaming-Shader-Applikationen nicht portabel, schwer zu entwickeln und noch schwerer zu debuggen sind. Dem will Nvidia jetzt abhelfen und bietet mit CUDA (Compute Unified Device Architecture, [4]) ein Toolkit und SDK, mit dem jedermann C-Programme entwickeln kann, die nativ auf Nvidia-G8800-Karten laufen. Die CUDA-Binaries, Kernels genannt, kommen in den Genuss des parallelen Datencache und des Thread Execution Manager der GPU, der viele Threads mit einfacher Flotingpoint-Genauigkeit simultan abarbeitet [5]. Spätere Nvidia-GPUs werden auch mit doppelt breiten Gleikommazahlen arbeiten. Wermutstropfen: Ein Kernel darf maximal fünf Sekunden laufen, danach erwürgt ihn eine Art Watchdog.

Abstrakter Layer, der auf Open-GL-Treiber aufsetzt

Das Toolkit arbeitet mit Linux plus Open-GL-Treiber (der Hersteller empfiehlt Red Hat 4 und Fedora) oder Windows XP mit Direct-X. Der CUDA-Runtime-Treiber benutzt nämlich die Open-GL-Schnittstelle und stellt seinerseits für C-Applikationen einen abstrakten Layer bereit, der auch für spätere Nvidia-Quadro-Generationen gleich bleiben soll.

Teil des SDK sind neben FFT- und BLAS-Bibliotheken (Fouriertransformation und lineare Algebra) diverse Quellcode-Beispiele, so Implementierungen von Matrixmultiplikation und Transponierten einer Matrix, Bitonic Sort (das ist ein Sortiernetz-Algorithmus), Ladner-Fischer-Addierer, eine Wavelet-Paket-Transformation oder Timer-gesteuertes Profiling. Diese Projektdateien eignen sich als Grundlage eigener Versuche. Schön: Die Makefiles kennen eine Emulationsoption, um die Applikation testweise auf der Standard-CPU ablaufen zu lassen. Das Hochladen der Software in die echte GPU regelt das Toolkit natürlich auch.

Infos

[1] Spezifikation der ATI-Serie Radeon X1900: [http://ati.amd.com/de/products/radeonx1900/specs.html] und [http://ati.amd.com/products/radeonx1k/whitepapers/X1000_Family_Technology_Overview_Whitepaper.pdf]

[2] Folding@Home: [http://folding.stanford.edu/german/]

[3] GPU-Client für Folding@Home: [http://folding.stanford.edu/FAQ-ATI.html]

[4] CUDA: [http://www.developer.nvidia.com/object/cuda.html]

[5] CUDA-Programmierung: [http://developer.download.nvidia.com/compute/cuda/0_8/NVIDIA_CUDA_Programming_Guide_0.8.pdf]

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook