GPU Coder

Génération de code CUDA pour des GPU NVIDIA

GPU Coder™ génère du code CUDA® optimisé à partir de code MATLAB® et de modèles Simulink®. Le code généré inclut des noyaux CUDA pour les sections parallélisables de vos algorithmes de Deep Learning, de vision embarquée et de traitement du signal. Pour une performance élevée, le code généré appelle des bibliothèques NVIDIA® CUDA optimisées, notamment TensorRT™, cuDNN, cuFFT, cuSolver et cuBLAS. Le code peut être intégré dans votre projet sous forme de code source, de bibliothèques statiques ou dynamiques, et peut être compilé pour des desktops, des serveurs et des GPU embarqués sur des plateformes NVIDIA Jetson™, NVIDIA DRIVE™ ou autre. Vous pouvez utiliser le code CUDA généré dans MATLAB afin d'accélérer les réseaux de Deep Learning et d'autres parties de votre algorithme qui exigent des calculs intensifs. Avec GPU Coder, vous pouvez intégrer à vos algorithmes et au code généré du code CUDA écrit à la main.

Lorsque vous l'utilisez avec Embedded Coder®, GPU Coder vous permet également de vérifier le comportement numérique du code généré en réalisant des tests SIL (Software-in-the-loop) et PIL (Processor-in-the-loop).

En savoir plus:

Génération de code CUDA rapide et flexible

Générez du code CUDA optimisé. Déployez du code libre de droits.

Déploiement d'algorithmes libres de droits

Compilez et exécutez votre code généré sur des GPU NVIDIA courants depuis un PC, sur des data centers ou du harware embarqué. Le code généré est libre de droits, vous pouvez donc le déployer gratuitement dans des applications commerciales pour vos clients.

Voir la galerie (2 images)

Témoignages clients sur GPU Coder

Découvrez comment les ingénieurs et scientifiques de différentes industries utilisent GPU Coder pour générer du code CUDA pour leurs applications.

Les prototypes Airbus ont automatisé la détection de défauts sur NVIDIA Jetson TX2.

Génération de code à partir des toolboxes et fonctions supportées

GPU Coder génère du code à partir d'un large éventail de fonctionnalités du langage MATLAB que les ingénieurs de design utilisent pour développer des algorithmes en tant que composants de systèmes plus importants. Ceci inclut des centaines d'opérateurs et de fonctions MATLAB ainsi que leurs toolboxes associées.

Support du langage et des toolboxes MATLAB pour la génération de code.

Incorporation de code existant

Utilisez les fonctionnalités d'intégration de code existant pour incorporer du code CUDA fiable ou hautement optimisé dans vos algorithmes MATLAB pour les tester dans MATLAB. Appelez ensuite ce même code CUDA à partir du code généré.

Incorporation du code CUDA existant dans du code généré.

Génération de code CUDA à partir de modèles Simulink

Créez des modèles dans Simulink et générez du code CUDA optimisé.

Exécuter des simulations et générer du code optimisé pour les GPU NVIDIA

Lorsqu'il est utilisé avec Simulink Coder™, GPU Coder accélère les parties des blocs MATLAB Function qui exigent des calculs intensifs dans vos modèles Simulink sur des GPU NVIDIA. Vous pouvez ensuite générer du code CUDA optimisé à partir du modèle Simulink et le déployer sur votre GPU NVIDIA cible.

Modèle Simulink d'un détecteur de contours Sobel exécuté sur un GPU.

Déploiement d'algorithmes de Deep Learning de bout en bout

Utilisez de nombreux réseaux de Deep Learning entraînés (notamment ResNet-50, SegNet et LSTM) à partir de la Deep Learning Toolbox™ dans votre modèle Simulink et déployez-les sur des GPU NVIDIA. Générez du code pour le prétraitement et post-traitement en parallèle avec vos réseaux de Deep Learning entrainés afin de déployer des algorithmes complets.

Enregistrement de signaux, réglage de paramètres et vérification numérique du comportement du code

Utilisé avec Simulink Coder, GPU Coder vous permet d'enregistrer des signaux et de régler des paramètres en temps réel à l'aide de simulations en mode externe. Utilisez Embedded Coder avec GPU Coder pour exécuter des tests SIL (Software-in-the-loop) et PIL (Processor-in-the-loop) qui vérifient numériquement que le code généré correspond au comportement de la simulation.

Utilisez le mode externe pour enregistrer des signaux et régler des paramètres dans Simulink.

Génération de code CUDA à partir de réseaux de Deep Learning

Déployez des réseaux de Deep Learning entraînés à l'aide de Deep Learning Toolbox.

Déployer des algorithmes de Deep Learning de bout en bout

Déployez de nombreux réseaux de Deep Learning entraînés (notamment ResNet-50, SegNet et LSTM) à partir de la Deep Learning Toolbox™ sur des GPU NVIDIA. Utilisez des couches de Deep Learning prédéfinies ou définissez des couches personnalisées pour votre application spécifique. Générez du code de prétraitement et de post-traitement en parallèle avec vos réseaux de Deep Learning afin de déployer des algorithmes complets.

Générer du code optimisé pour l'inférence

GPU Coder génère du code avec une empreinte réduite par rapport aux autres solutions de Deep Learning, car il ne génère que le code nécessaire pour exécuter l'inférence avec votre algorithme spécifique. Le code généré appelle des bibliothèques optimisées, notamment TensorRT and cuDNN.

Inférence d'une image unique avec VGG-16 sur un GPU Titan V à l'aide de cuDNN.

Optimisation poussée avec TensorRT

Générez du code s'intégrant à NVIDIA TensorRT, un outil haute performance pour l'optimisation et l'exécution d'inférences de Deep Learning. Utilisez des données de types INT8 ou FP16 pour obtenir de meilleures performances qu'avec le type de données FP32.

Amélioration de la vitesse d'exécution avec des données de types TensorRT et INT8.

Quantification du Deep Learning

Quantifiez votre réseau de Deep Learning pour réduire l'utilisation de la mémoire et améliorer les performances des inférences. Analysez et visualisez les compromis entre les performances optimisées et la précision des inférences avec l'application Deep Network Quantizer.

Optimisation du code généré

GPU Coder optimise automatiquement le code généré. Utilisez des design patterns pour améliorer encore davantage les performances.

Réduction des transferts entre les mémoires du CPU et du GPU et optimisation de l'utilisation de la mémoire

GPU Coder analyse, identifie et partitionne automatiquement les segments de code MATLAB à exécuter sur le CPU ou le GPU. Il minimalise également le nombre de copies de données entre le CPU et le GPU. Utilisez des outils de profilage pour identifier les autres goulots d'étranglement possibles.

Rapports de profil identifiant les goulots d'étranglements possibles.

Invocation de bibliothèques optimisées

Le code généré avec GPU Coder fait appel aux bibliothèques CUDA de NVIDIA optimisées, notamment TensorRT, cuDNN, cuSolver, cuFFT, cuBLAS, et Thrust. Le code généré à partir des fonctions issues de toolboxes MATLAB est mappé sur des librairies optimisées, dans la mesure du possible.

Code généré appelant des fonctions dans la bibliothèque cuFFT CUDA optimisée.

Utilisation de design patterns pour une accélération plus poussée

Les design patterns de type stencil utilisent une mémoire partagée pour améliorer la bande passante mémoire. Ils sont appliqués automatiquement lorsque vous utilisez certaines fonctions telles que la convolution. Vous pouvez également les invoquer manuellement au moyen de pragmas spécifiques.

Le design pattern de type stencil.

Prototyper sur hardware

Implémentez votre algorithme rapidement sur hardware grâce à la conversion automatique en code CUDA.

Prototypage sur les plateformes NVIDIA Jetson et DRIVE

Automatisez la compilation croisée et le déploiement du code généré sur les plateformes NVIDIA Jetson et DRIVE à l'aide du support package pour les GPU NVIDIA de GPU Coder.

Prototypage sur la plateforme NVIDIA Jetson.

Accès aux périphériques et aux capteurs depuis MATLAB et le code généré

Communiquez à distance avec la cible NVIDIA depuis MATLAB pour collecter les données de webcams et d'autres périphériques supportés pour un prototypage dès le début du cycle de développement. Déployez votre algorithme en parallèle du code d'interface périphérique sur la carte pour une exécution autonome.

Accès aux périphériques et aux capteurs depuis MATLAB et le code généré.

Du prototypage à la production

Utilisez GPU Coder avec Embedded Coder pour effectuer un suivi interactif de votre code MATLAB à côté du code CUDA généré. Vérifiez le comportement numérique du code généré exécuté sur le hardware avec des tests SIL (Software-in-the-loop) et PIL (Processor-in-the-loop).

Rapport de traçabilité interactif à l'aide de GPU Coder et d'Embedded Coder.

Accélérer les algorithmes

Générez du code CUDA et compilez-le pour l'utiliser dans MATLAB et Simulink.

Accélération d'algorithmes avec des GPU dans MATLAB

Appelez le code CUDA généré sous forme de fonction MEX depuis votre code MATLAB pour accélérer son exécution. Les performances observées dépendront de la nature de votre code MATLAB. Profilez les fonctions MEX générées pour identifier les goulots d'étranglement et ainsi cibler vos efforts d'optimisation.

Accélération de simulations Simulink avec les GPU NVIDIA

Lorsqu'il est utilisé avec Simulink Coder, GPU Coder accélère les parties des blocs MATLAB Function qui exigent des calculs intensifs dans vos modèles Simulink sur des GPU NVIDIA.