GPU Coder

Erzeugung von CUDA-Code für NVIDIA-GPUs

GPU Coder™ erzeugt aus MATLAB®-Code optimierten CUDA®-Code für Deep Learning, Embedded Vision und autonome Systeme. Der generierte Code ruft optimierte CUDA-Bibliotheken von NVIDIA auf, darunter cuDNN, cuSolver und cuBLAS. Er lässt sich in Form von Quellcode und statischen oder dynamischen Bibliotheken in Ihr Projekt einbinden und kann zur Prototypenentwicklung auf GPUs wie NVIDIA Tesla® und NVIDIA Tegra® genutzt werden. Sie können den generierten CUDA-Code in MATLAB verwenden, um berechnungsintensive Anteile Ihres MATLAB-Codes zu beschleunigen. Mit GPU Coder lässt sich außerdem vorhandener CUDA-Code in Ihre MATLAB-Algorithmen und in den neu generierten Code integrieren.

Bei Verwendung von GPU Coder mit Embedded Coder® kann das numerische Verhalten des generierten Codes durch SIL-Tests (Software-in-the-Loop) geprüft werden.

Jetzt Loslegen:

Schneller, flexibler CUDA-Code

Erzeugen Sie optimierten CUDA-Code. Stellen Sie Code lizenzgebührenfrei bereit.

Lizenzgebührenfreie Bereitstellung von Algorithmen

Kompilieren Sie Ihren generierten Code und führen Sie ihn auf gängigen NVIDIA GPUs aus– von Desktopsystemen über Rechenzentren bis hin zu Embedded Hardware. Der generierte Code ist lizenzfrei und kann in kommerziellen Anwendungen für Sie kostenlos an Ihre Kunden weitergegeben werden.

Galerie erkunden (2 Bilder)

Anwenderberichte zu GPU Coder

Erfahren Sie, wie Ingenieure und Wissenschaftler in einer Vielzahl von Branchen GPU Coder zur Generierung von CUDA-Code für ihre Anwendungen nutzen.

Airbus entwickelt einen Prototypen für die automatische Fehlererkennung auf NVIDIA Jetson TX2

Codegenerierung für unterstützte Toolboxen und Funktionen

GPU Coder generiert Code aus einer großen Auswahl von MATLAB-Funktionen, die von Entwicklungsingenieuren zum Entwurf von Algorithmen als Komponenten größerer Systeme verwendet werden. Die Auswahl umfasst mehr als 390 Operatoren und Funktionen aus MATLAB und zugehörigen Toolboxen.

Unterstützung der MATLAB-Sprache und -Toolboxen für die Codegenerierung.

Einbinden von Legacy-Code

Mithilfe von Optionen zur Integration von vorhandenem Code können Sie bewährten oder stark optimierten CUDA-Code zum Testen in Ihre MATLAB-Algorithmen integrieren und denselben CUDA-Code dann auch aus dem neu generierten Code heraus aufrufen.

Einbinden von vorhandenem CUDA-Code in neu erzeugten Code.

CUDA-Codegenerierung aus Deep Learning-Netzwerken

Stellen Sie trainierte Deep Learning-Netzwerke mit der Deep Learning Toolbox bereit.

Bereitstellung von End-to-End-Algorithmen für Deep Learning

Mit der Deep Learning Toolbox™ können Sie eine Vielzahl an trainierten Deep Learning-Netzwerke wie ResNet-50 und SegNet für NVIDIA-GPUs bereitstellen. Code für die Vor- und Nachverarbeitung kann dabei zusammen mit den trainierten Netzen erzeugt werden, um vollständige Algorithmen zu erhalten.

Stellen Sie SegNet und andere trainierte Deep Learning-Netze bereit.

Generierung von optimiertem Code für die Vorhersage

Der vom GPU Coder generierte Code ist im Vergleich zu anderen Deep Learning-Lösungen weniger komplex, da nur Code erzeugt wird, der für die Inferenz mit Ihrem spezifischen Algorithmus nötig ist. Der generierte Code ruft optimierte Bibliotheken auf, darunter TensorRT™ und cuDNN.

Einzelbild-Inferenz mit VGG-16 auf einer Titan V GPU mit cuDNN.

Zusätzliche Optimierung mit TensorRT

Generieren Sie Code unter Verwendung von NVIDIA TensorRT, eine hochleistungsfähige Optimierungs- und Laufzeitumgebung für Deep Learning-Inferenz. Wenn Sie dabei INT8- oder FP16-Datentypen nutzen, erzielen Sie zusätzliche Leistungssteigerungen gegenüber dem standardmäßigen FP32-Datenyp.

Höhere Ausführungsgeschwindigkeit mit TensorRT und INT8-Datentypen.

Quantisierung von Deep Learning

Quantisieren Sie Ihr Deep Learning-Netzwerk nach INT8 und analysieren Sie den Kompromiss hinsichtlich der Genauigkeit der Quantisierung der Gewichte und Verzerrungen ausgewählter Schichten mit Hilfe des Unterstützungspakets der Modellquantisierungsbibliothek.

Optimierung des erzeugten Codes

Wenden Sie automatische Optimierungen auf den vom GPU Coder erzeugten Code an und steigern Sie die Leistung mit Designmustern.

Minimierte CPU-GPU-Speicherübertragungen und optimierte Speicherauslastung

MATLAB-Codesegmente werden von GPU Coder automatisch analysiert, identifiziert und partitioniert und entweder der CPU oder der GPU zur Ausführung zugewiesen. Außerdem wird die Anzahl der Datenkopien zwischen CPU und GPU minimiert. Mithilfe von Profiling-Tools können Sie weitere potenzielle Engpässe identifizieren.

Profilberichte zur Identifizierung potenzieller Engpässe.

Aufruf optimierter Bibliotheken

Der vom GPU Coder generierte Code ruft optimierte CUDA-Bibliotheken von NVIDIA auf, darunter TensorRT, cuDNN, cuSolver, cuFFT, cuBLAS und Thrust. Code, der mit Toolbox-Funktionen von MATLAB generiert wurde, wird nach Möglichkeit optimierten Bibliotheken zugeordnet.

Generierter Code, der Routinen in der optimierten cuFFT CUDA-Bibliothek aufruft.

Zusätzliche Beschleunigung durch Designmuster

Designmuster wie die Stencil-Verarbeitung nutzen gemeinsamen Speicher zur Verbesserung der nötigen Speicherbandbreite. Bei bestimmten Funktionen (z. B. Faltung) werden sie automatisch angewendet. Mithilfe spezifischer Pragmas können Sie sie auch manuell aufrufen.

Designmuster der Stencil-Verarbeitung.

Erstellung von Prototypen auf der Hardware

Dank automatischer Konvertierung Ihres Algorithmus in CUDA-Code gelangen Sie schnell zur Implementierung auf der Hardware.

Prototyping auf den NVIDIA Jetson und DRIVE Plattformen

Automatisieren Sie die Kreuzkompilierung und Bereitstellung von erzeugtem Code auf NVIDIA Jetson™ und NVIDIA DRIVE™ mit dem GPU Coder™ Support Package für GPUs von NVIDIA®.

Prototyping auf NVIDIA Jetson.

Zugriff auf Peripheriegeräte und Sensoren über MATLAB und generierten Code

Kommunizieren Sie aus MATLAB heraus mit dem NVIDIA-Zielsystem, um Daten von Webcams und anderen unterstützten Peripheriegeräten zur ersten Prototypenentwicklung abzurufen. Formulieren Sie Ihren Algorithmus und stellen Sie ihn zusammen mit Code für die Peripherieschnittstelle auf dem board zur eigenständigen Ausführung bereit.

Zugriff auf Peripheriegeräte und Sensoren über MATLAB und generierten Code.

Übergang vom Prototyp zur Produktion

Verwenden Sie GPU Coder mit Embedded Coder®, um Ihren MATLAB-Code interaktiv mit dem generierten CUDA-Code daneben zurückzuverfolgen. Überprüfen Sie das numerische Verhalten des generierten Codes bei der Ausführung auf Hardware durch SIL- (Software-in-the-Loop) und PIL-Tests (Processor-in-the-Loop).

Interaktiver Rückverfolgbarkeitsbericht, generiert vom GPU Coder unter Verwendung des Embedded Coder.

Beschleunigen von Algorithmen

Erzeugen Sie CUDA-Code und kompilieren Sie ihn für die Nutzung in MATLAB.

Beschleunigung der Laufzeit von Algorithmen mit GPUs

Rufen Sie erzeugten CUDA-Code als MEX-Funktion aus Ihrem MATLAB-Code heraus auf, um die Ausführung zu beschleunigen. Die Laufzeitvorteile variieren dabei jedoch je nach Art Ihres MATLAB-Codes. Mittels Profiling von generierten MEX-Funktionen können Sie Engpässe identifizieren und gezielt adressieren.

Neue Funktionen

Unterstützung von cuBLAS

Erzeugung von CUDA-Code für schritt- und batchweise Matrizen-Multiplikationen

Zeilenorientiertes Array-Layout

Vereinfachung der Anbindung des generierten Codes an C-Umgebungen, indem Arrays im zeilenorientierten Layout gespeichert werden

Signal Processing Toolbox – Code-Generierung

Generieren von Code für FFT-basierte FIR-Filterung und Kurzzeit-Fouriertransformation mittels fftfilt, stft und istft

Unterstützung von NVIDIA Hardware

Zugriff auf integrierte Kameramodule und Generieren von CUDA-Code für die VideoReader-Funktion

Single Shot Object Detection-Netze (SSD)

Objekterkennung auf einer NVIDIA GPU mittels eines Single Shot Multibox Detektors

LSTM-Netze (Long Short-Term Memory)

Erzeugen von Code für bidirektionale und zustandsorientierte LSTM

Multi-Output-Netze

Erzeugen von Code für Netze mit mehreren Ausgaben

Deep-Learning-Netze

Erzeugen von Code für Darknet-19, Darknet-53, Inception-ResNet-v2, NASNet-Large und NASNet-Mobile

Details zu diesen Merkmalen und den zugehörigen Funktionen finden Sie in den Versionshinweisen.