Architecte logiciel - C++
Exigences en pratique :
• Configuration du cadre du projet et décomposition de la composition du logiciel : évolutivité, modularité et maintenabilité.
• Mettre en place un cadre de développement pour le développement distribué de logiciels afin de garantir l'évolutivité, la modularité et la maintenabilité.
• Concevoir et définir les normes et directives de codage ainsi que le processus de révision pour évaluer l'évolutivité, la modularité et la maintenabilité du code à chaque étape du cycle de vie du développement du logiciel
• Identifiez les plates-formes, les chaînes d'outils de configuration et les API de support nécessaires à chaque étape du processus de développement : configuration de l'IDE Visual Studio, intégration continue, débogage pour plusieurs threads, licences, licences multilingues, regroupement de dépendances, etc.
• Configurez les modèles de projet C++ pour l'architecture des services, la structure de l'API et la machine à états.
• Concevoir le processus de développement pour le codage à thread parallèle et le débogage.
• Formez l'équipe à des compétences en matière de débogage et à des améliorations de performances subtiles avec C++.
• Concevoir l'architecture des dépendances et le système de gestion des versions
• Concevoir le système de gestion des versions et les licences API/bibliothèque.
• Concevez des cadres de test pour l'intégration, la distribution, le profilage des performances et la sécurité.
Ingénieur logiciel - Performance du processeur graphique
Exigences en pratique :
• Expérience avec l'API CUDA de bas niveau
• Maîtrise des bases de C++/C.
• Maîtrise de la chaîne d'outils de développement Visual Studio.
• Expérience de l'analyse et de l'optimisation des performances de bas niveau avec une solide compréhension de l'architecture matérielle des GPU et de l'optimisation des performances orientée HW.
• Y compris la maîtrise des outils de profilage GPU tels que NVIDIA Visual Profiler, NVIDIA Nsight Compute et des outils Graphics Developer pour le débogage
• Optimisation des noyaux en continu dans le temps : pas seulement des optimisations de noyau de haut niveau fournies avec CUDA.
• Concevoir le cadre du traitement d'image en pipeline
• Optimisation du cœur CUDA pour atteindre des performances maximales pour un traitement en pipeline entre plusieurs blocs de fonctions s'exécutant simultanément.
• Équilibrage dynamique de la charge entre les noyaux et les fonctions.
• Traitement entrelacé entre le processeur et le GPU et modification de l'exécution du flux de contrôle du traitement du GPU depuis le processeur.
• Entraînez-vous avec NVIDIA Direct pour accéder à la mémoire directement depuis les périphériques (PCIe), l'écran et le port USB, en contournant le processeur
• Entraînez-vous à créer une visualisation directe de la mémoire GPU pour le débogage sans transfert de processeur
• Expérience dans la conception et l'optimisation de réseaux neuronaux fondamentaux et dans la modélisation de neurones (essentiellement l'optimisation de modèles mathématiques impliquant des noyaux pondérés dans le temps).
• L'exposition à Omniverse est un avantage
Ingénieur logiciel - C++
Exigences en pratique :
• Excellentes compétences en C++ sur les plateformes Windows et Linux.
• L'optimisation des cycles de traitement pour les pipelines d'images volumineux et la gestion de la mémoire constituent un avantage. (La caméra génère 1 Go de données par seconde)
• Une expérience de l'architecture State-Machine est un atout
• Expérience de l'ensemble du cycle de vie du développement de logiciels et des meilleures pratiques.
• Processus de réflexion basé sur la POO : évolutivité, modularité, codage polymorphe
• Compréhension approfondie de l'architecture, connaissance approfondie des modèles de conception et aptitude à concevoir des architectures pour le threading parallèle
• Bibliothèques de programmation multithread telles que PThreads, OPENMP, OPENCL
• Expérience de la conception et du développement d'architectures d'API
• Expérience dans la création et la distribution de DLL et de bibliothèques statiques.
• Adepte de la traduction et de l'optimisation d'algorithmes, en particulier du DSP (qui inclut le traitement d'images) et/ou des architectures de réseaux neuronaux (au moins l'un des deux est nécessaire)
• Implémentation et optimisation d'algorithmes
• Adepte de la création de cadres de test pour les codes.
• Doit avoir un fort penchant pour la documentation et la lisibilité du code.