Équipe de développement logiciel
Rôles en génie logiciel
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.