HomeHigh Performance Computing > NVIDIA GPU Computing

NVIDIA GPU Computing

GPU Computing bezeichnet die Verwendung einer GPU (Graphics Processing Unit) für allgemeine wissenschaftliche und technische Berechnungen. CPU und GPU arbeiten hierbei in einem heterogenen Computing-Modell zusammen. Der sequentielle Teil der Applikation läuft auf der CPU, und der berechnungsmäßig aufwendige Teil wird auf die GPU ausgelagert. Aus Benutzersicht läuft die Anwendung einfach schneller, weil sie die hohe Leistungsfähigkeit der GPU verwendet und so die Performance enorm steigert.

GPU Computing wird durch die massiv parallele CUDA-Architektur der NVIDIA GPUs ermöglicht. Die CUDA-Architektur besteht aus Hunderten von Prozessorkernen, die zusammen die komplexen Anwendungen berechnen.

Die parallele CUDA-Architektur und das Programmiermodell

Die parallele CUDA-Hardware-Architektur steht neben dem parallel CUDA-Programmiermodell, das eine Reihe von Abstraktionen bietet, um sowohl im kleinen wie im großen Daten- und Task-Parallelität zu ermöglichen. Der Programmierer kann diese Parallelität in höheren Programmiersprachen wie C, C++, Fortran oder Treiber-APIs wie OpenCL und DirectX-11-Compute ausdrücken.

Das parallele Programmiermodell von CUDA leitet Programmierer dahin, das Problem in grobe Unterprobleme zu unterteilen, die unabhängig und parallel gelöst werden können. Feingranulare Parallelität innerhalb dieser Teilprobleme führt wiederum zu einer paralleln Berechnung jedes einzelnen Teilproblems. Die CUDA-GPU-Architektur von und das entsprechende Parallel Computing Model wird mittlerweile von Hunderten von Anwendungen unterstützt und in fast 1000 wissenschaftlichen Veröffentlichungen beschrieben.

GPU Computing mit CUDA

Die NVIDIA-CUDA-Technologie nutzt die massiv-parallele Rechenleistung der NVIDIA-GPUs. Die CUDA-Architektur ist eine revolutionäre parallele Computing-Architektur, die die Performance der NVIDIA-Grafikprozessoren für General-Purpose GPU Computing (GPGPU Computing) bereitstellt. Anwendungen, die die CUDA-Archtitektur unterstützen, finden eine Installationsbasis von hunderten von Millionen CUDA-fähigen GPUs in Desktop-Rechnern und Notebooks wieder, sowie in professionellen Workstations und Supercomputing Clustern.

Mit der CUDA-Architektur und den CUDA-Programmiertools erzielen Software-Entwickler dramatische Speedups in Bereichen wie medizinische Bildverarbeitung und Rohstoff-Exploration und entwickeln bahnbrechende Anwendungen in Bereichen wie Bilderkennung und Realtime-HD-Wiedergabe und -Encoding. CUDA bietet diese noch nie dagewesene Performance über Standard-APIs wie OpenCL und DirectX-Compute und über höhere Programmiersprachen wie C/C++, Fortran, Java, Python und das Microsoft .NET Framework.

CUDA aus Entwicklersicht

CUDA besteht aus drei wichtigen Teilen: die CUDA Driver API (auch "Low-Level API" genannt), das CUDA-Toolkit (die eigentliche Entwicklungsumgebung mit den Laufzeitbibliotheken) und einem Software Development Kit (CUDA SDK) mit Codebeispielen.

Das CUDA Toolkit ist im Wesentlichen eine C-Entwicklungsumgebung und enthält den eigentlichen Compiler (nvcc), eine Weiterentwicklung des PathScale-C-Compilers, optimierte FFT- und BLAS-Bibliotheken, sowie einen grafischen Profiler (cudaprof), einen gdb-basierenden Debugger (cudagdb), Shared Libraries für die Laufzeitumgebung der CUDA-Programme (die "Runtime API") und zuguterletzt eine umfangreiche Dokumentation inklusive eines Entwicklerhandbuchs.

Das CUDA Developer Kit (SDK) enthält Beispiele mit Quellcode für Matrixberechnungen, Pseudozufallszahlgeneratoren, Bildfaltung, Waveletberechnungen und vieles mehr.