Architectures multi-GPU et hybrides au service de l`automotive
Transcription
Architectures multi-GPU et hybrides au service de l`automotive
Architectures multi-GPU et hybrides au service de l'automotive AXIS / IEF - Université Paris Sud Marius Vasiliu et l'équipe SimCode "Smart" automotive et GPU L'automotive est technologique due bouleversements : entré à la dans une phase d'explosion superposition de plusieurs L'entrée massive sur le marché des véhicules hybrides ou électriques Besoin accru de sécurité et fiabilité Optimisation des ressources de transport Réduction des consommations énergétiques et de la pollution Baisse de prix dramatique des capteurs ( ± "intelligents" ) L'automotive a besoin d'une puissance embarquée de calcul de plus en plus forte, avec les limites raisonnables de consommation (< 60-100W ) Nombre très important de projets automotives complexity "Smart" automotive et GPU Pedestrian recognition Lane keep assistant Road keep assistant Driver assistant Semi-auto drive Driver monitoring Traffic sign recognition Pre-crash system 360° display reconstruction Rear parking camera 2006 2010 2014 year Quelles types d'architectures embarquées ? L'expérience des projets précédents (Picar, LOVe etc.) nous montre que l'on peut utiliser des architectures embarquées "light" (µC, DSP, FPGA) pour quelques fonctionnalités bien particulières mais ... Les applications vidéo (acquisition, traitement, affichage éventuel) demandent une bande passante "totale" proche du Go/s. Les traitements 3D vidéo SD demandent des centaines de GFlops, pour la 3D sur vidéo HD il faut plus d'1 TFlops Une mémoire d'une seconde demande 1-2 Go ... La complexité des traitements impose rapidement une solution embarquée "heavy" où la place des GPU et la programmation Cuda sont essentielles. Exemple d'application automotive : le projet SimCode (IEF/Limsi) Réaliser des véhicules électriques d'autonomie "intelligente" à court terme : capables déplacement semi-autonome d'un point A à un point B avec intégration dans les aléas du trafic. B A supervision locale et/ou à distance par réalité augmentée Exemple d'application automotive : le projet SimCode (IEF/Limsi) Supervision locale et/ou à distance : flux stéréoscopique + métadonnées envoyés à distance par réseau WiMax+Internet ou 3G. l'acteur distant dispose d'une réalité virtuelle augmentée (vision 3D + indications vitesse, position, choix stratégiques etc.) et prend des décisions "de haut niveau" : continuer en "safe mode" (faible vitesse et sécurité maximale) changer de direction changer de vitesse moyenne effectuer un dépassement, changer de voie outrepasser une restriction ou un consigne garer la voiture Architecture centralisée ou distribuée ? Architecture distribuée : robuste mais difficile à diriger nombre variable de dispositifs, généralement associés aux capteurs communication et contrôle par bus (CAN ou FlexRay) grosse variété d'architectures : µC, DSP, FPGA, ASIC consommation individuelle faible mais le total est important très difficile à synchroniser et à étiqueter temporellement Architecture centralisée : souplesse et puissance unité centrale GPU+CPU qui décide de l'activation et de la communication avec les capteurs et les actionneurs algorithmes souples : adaptation et activation sélective des briques logicielles en fonction de la réalité terrain étiquetage et synchronisation centralisées des données, accès local pour traitement et fusion sur CPU et GPU, tolérance aux pannes Architecture GPU centralisée : critères Puissance de calcul la charge de calcul nécessaire est variable dans le temps mais dans de situations critiques et accidentogènes c'est la puissance maximale qui compte cela élimine dès le départ les architectures Tegra 2.x ou 3.x 80% de la puissance demandée concerne des algorithmes (massivement) parallèlisables Î sur GPU, mais les CPU restent nécessaires pour des algorithmes souples et adaptatifs la puissance moyenne de calcul ne dépasse pas 30% de la puissance de pic Consommation horloges variables et gestion avancée de l'énergie les versions GT200 et GF10x pour portables répondent bien aux contraintes Architecture embarquée ciblée (2010) PC portable assurant l'ensemble des traitements (bas, moyen et haut niveau) : 1 CPU Core2 Extreme (4 cœurs) et 2 GPU (2 x 128 cœurs) Core2 Extreme µP µP µP µP chip-set NVidia DDR3 8Go bus PCI Express x 8 DDR3 1Go GTX 280M 128 PE ( 16 x 8 ) GPUs GTX 280M 128 PE ( 16 x 8 ) GPUs DDR3 1Go DVI-D Architecture embarquée ciblée (2011) PC portable assurant l'ensemble des traitements (bas, moyen et haut niveau) : 1 CPU Sandy Bridge (4x2 cœurs) et 1 GPU (8 x 48 cœurs) Sandy Bridge DDR3 16Go µP µP µP µP µP µP µP µP chip-set Intel bus PCI Express x 16 GTX 485M 384 PE ( 8 x 48 ) GPUs DDR5 2Go DVI-D GTX 485M (Clevo P170HM) Scores GPU 3DMark Cible #2 Cible #1 ( courtesy of J.S. Leitner, 1/6/2011) Architecture de l'écosystème automotive accéléromètres GPS caméras HD Bayer Flux Fluxstéréo stéréoraw raw Analyse Analyseetettraitement traitementen en temps -réel temps-réel caméras IR Consignes Consignes liaison WiMax et/ou 3G Arbitrage écision Arbitrageetetddécision Flux Fluxstéréo stéréocompressé compressé LIDAR vitesse, vitesse, direction, direction, frein frein bus CAN odométrie, odométrie, état étatetc. etc. Types de données dans le système Niveau interfaces (acquisition / communication) : flux vidéo ( 2 x 25 img/s ) : niveau gris, Bayer, YUYV, RGB paquets lidar ( 25 paquets/s, ≅700 pts 3D/paquet ) trames CAN : commande moteur, direction, frein, retours odométriques, charge batterie etc. ( ≅500 trames/s ) trame GPS : position, nb. satellites etc. ( 1 trame/s ) vecteurs 3D accélération ( nb. accéléromètres x 20-100/s ) commandes utilisateur (10-50 échantillons/s) Niveau traitement nuages de points (3D, 3D+T, 3D+T+features etc.) pistes / trajectoires (3D+T) cartes / matrices (de disparité, vitesse, probabilité) arbres et listes (probabilités, features etc.) Les échelles temporelles de nos applications automotives Echelle de bas niveau (<50 ms) : Commandes et contrôle moteur, direction, frein Synchronisation & time-stamp : accélero, caméra, lidar Echelle de moyen niveau (50ms - 2 s) : Durée raisonnable de garde en mémoire des données Inspection et reconstruction de la scène, Détection et suivi d'obstacles, Evitement "automatique" d'obstacles Echelle de haut niveau (2s - 30 s) : Planification de trajectoires Engagement de dépassement ou changement de voie Garer le véhicule, franchir une intersection Contraintes de communications et réaction La bande passante montante est limitée et (150Ko/s - 2 Mo/s) alors que le flux vidéo brut moins 80 Mo/s variable est d'au Le délai de communication est variable (correction des erreurs, micro-commutations WiMax ou 3G, routage) 60% du temps la boucle a un retard inférieur à 500ms : dans ces cas une "vraie" conduite à distance est envisageable, mais ... Il y a des moments (<2%) où la boucle de contrôle à distance a un retard de 3s ! Les voitures doivent être autonomes et sures pendant cet intervalle de temps. La synchronisation et le time-stamping sont essentiels Briques de base et algorithmes souples Time-stamping et association de données Conversion et rectification epipolaire des flux vidéo Validation ou correction de calibration en temps-réel Stereo matching et calcul de profondeur Histogrammes U et V-disparité, détection des points et cibles remarquables Odométrie visuelle, fusion et validation de l'odométrie GPS et lidar (2 échelles de temps) Détection du plan et des bords de la route et des obstacles (voitures, piétons, mobilier urbain) Détection et lecture des panneaux routiers Planification de trajectoires Interface de communication utilisateur (compression, transmission, réalité augmentée, validation de commandes etc.) Vivement l’architecture hybride ! Seulement une partie des briques méritent d’être implantées sur GPU, les autres sont optimisées sur CPU Critères de décision : potentiel de parallélisation structures de données débit de lecture / écriture enchainement des traitements, affinité avec d'autres briques Le traitement irrégulier, le parcours d'arbres, de tables d'indexation ou liste, contrôle ou lacement de kernels Î mieux sur CPU Le traitement d'images, compression, décompression, sur GPU de nuage de points, affichage 2D/3D Î mieux Briques de base et algorithmes souples Le traitement et l'activation des briques n'est pas forcement régulier. Exemples : Détection et lecture des panneaux routiers Briques actives dans une action de dépassement Briques nécessaires pour garer la voiture Validation et correction dynamique de calibration Les algorithmes doivent être souples temporellement, demander le minimum d'intensité de calcul nécessaire spatialement, pour la vidéo, le lidar : utiliser des zones d'intérêt de taille minimale, avec adaptation dynamique (surveillance des extrémités de la scène et poursuite des objets remarquables) accorder des priorités claires entre les algorithmes prendre les meilleurs décisions sans l'ensemble des données Algorithmes souples et économie d'énergie Souplesse Î diminuer la charge moyenne et augmenter (éventuellement) les pics de charge Comment cela se traduit en pratique ? Gestion d'énergie de GF104 (version GTX 485M) "Performance states" : de P0 (maximum) à P15 (min. / idle) Accessibles par les NvAPI : GetDynamicPstatesInfoEx Concernent plusieurs blocs architecturaux : 1. Graphic Engine (les coeurs GPU) 2. Frame Buffer (la mémoire) 3. Video Engine (les shaders) Variation de fréquences (charge 0% Î charge 100%): Cœurs : 50 MHz Î 580 MHz Mémoire : 135 MHz Î 1500 MHz Shaders : 100 MHz Î 1150 MHz En l'absence de charge, les fréquences retombent après ≅17 s Algorithmes souples et économie d'énergie Variation des fréquences et de la consommation de GTX 485M pendant un pic de charge de 25 secondes 100 GPU Load [%] 50 0 0,00 10,00 20,00 30,00 40,00 50,00 60,00 70,00 80,00 1600 1400 P0 Core Clock [MHz] 1200 Memory Clock [MHz] 1000 Shader Clock [MHz] 800 P8 600 P12 400 200 P12 0 0,00 10,00 20,00 30,00 40,00 50,00 60,00 70,00 80,00 90,00 Algorithmes souples et économie d'énergie Quelle stratégie pour les systèmes multi-GPU ? 1. Bien sur, pas d'activation du SLI 2. Si besoin important (pic de consommation) : 3. Si le nécessaire ne dépasse pas les 30-40% de la puissance totale maximale : 4. distribution équitable sur les 2 ou 3 GPU en utilisant les techniques asynchrones (multi-threading, streams et synchronisation sur événements) utilisation d'un seul GPU à puissance maximale et repos des autres en idle Le basculement entre les 2 modes doit se faire une stratégie de haut niveau, déclenchée par choix de l'utilisateur et/ou l'état de la route par les Comparaison entre les cibles HW (PC complet) Critère 2* GTX 280M 1* GTX 485M Consommation max. alim. PC 210 W 220 W Consommation max. mesurée 110 W 130 W Consommation moyenne 50-60 W 50-65 W Score GPU 3DMark 9649 (SLI) 12142 Débit CPUÎ1 GPU mesuré 1542 Mo/s 3870 Mo/s Débit GPUÎGPU mesuré 48430 Mo/s 52970 Mo/s Débit 1 GPUÎCPU mesuré 1155 Mo/s 3649 Mo/s Support peer-to-peer NON OUI mais ... Vitesse moyenne partie GPU 100% 103-120% Vitesse moyenne partie CPU 100% 110-140% Stereo-matching (full, 640x480) 80 img/s 50 img/s Pourquoi parfois une baisse de performances ? La scalabilité des architectures Cuda 1.x automatique ... performances entre les et 2.x n'est pas forcement Code de stereo-matching optimisée pour, sur GT200 (GTX280M) : 25ms Î 2 x 40 img/s Le même code (recompilé dans le même version 3.2 ou 4.0) sur GF104 (GTX485M) : 20ms Î 50 img/s 1ère explication : notre code n'utilise pas assez les 384 cœurs (pas assez de blocks et de threads ...) Mais, sur les architectures 2.x on peut lancer plusieurs kernels en parallèle ! Si on lance 2 kernels décalés (pour 2 paires successives) : ≈24ms/paire donc finalement 2 x 42 img/s Affichage stéréoscopique NVidia sur GeForce Les scènes 3D rendues sous DirectX s'affichent automatiquement en 3D si le mode 3DVision est actif Mais afficher 2 flux vidéo 2D + insertion des features pour la réalité virtuelle augmentée c'est plus compliquée ... Utilisation des procédures présentées par S. Gateau (pas de doc officielle) et adaptées à notre système Compatibilité 100% avec Cuda et les NVApi Points essentiels : En mode 3DVision la surface primaire et le back-buffer d'une render target sont déjà stéréo (2 fois la largeur demandée) Le seul accès passe par une copie StretchRect intégrale d'une surface utilisateur contenant une signature NVidia vers le back-buffer en question ! Affichage stéréoscopique NVidia sur GeForce Receive / Database Full stream decoding Left Video Stream Features 2D+ Right Video Stream User off-screen surface GetDC left StretchRect right signature NVidia Full Screen (device backbuffer) Features DrawPrimitive 3D left Present right Full Screen (device primary surface) left right Outils d'analyse et optimisation Au-delà des optimisations "classiques" au niveau Cuda, de l'analyse avec le profiler ou le debugger, pour une optimisation avancé, il faut valider et analyser le vrai code GPU qui sera exécuté Nous avons développé un outils qui désassemble et analyse le code GPU (SSES) généré : CudAnalyser Mieux que CuObjDump ou Parallel Nsight de NVidia (interface graphique, registres symbolique) Inspiré par CudaVis et Decuda, il se présente comme une application autonome (.exe) qui n'a besoin d'aucune bibliothèque spécifique (compilation statique sous Qt) Support 64 bits (Fermi) en cours de développement CudAnalyser CudAnalyser Fonctionnalités de CudAnalyser : L'ouverture d'un ficher *.cubin sous format texte ou binaire Le choix des kernels qui seront désassemblés L'affichage sélectif des adresses, du code binaire, des étiquettes, des opcodes, des opérandes, des prédicats L'affichage de l'utilisation des registres générales, de condition etc. L'exportation des listings sous format texte, RTF ... A quoi cela sert ? A vérifier l'application effective des options de compilation A vérifier l'effet des inline assembleur (Cuda 4.x) A apprécier le potentiel d'optimisation A trouver (et contourner) d'éventuelles erreurs de nvcc Exemple de choix d'implantation Les 2 cameras vidéo qui partagent le FireWire utilisent des capteurs Bayer 1292x964 et peuvent envoyer les images sous les formats suivants : raw (Bayer) Î 1 octets /pixel niveau de gris Î 1 octets /pixel YUV Î 2 octets /pixel RGB Î 3 octets /pixel Parcours des images : carte FireWire mémoire non-paginée CPU mémoire GPU changement éventuel de format vers RGB rectification épipolaire utilisation / matching / encodage / affichage Direct GPU ? Exemple de choix d'implantation Quel est le format qui optimise la bande passante et la vitesse de traitement ? 1er choix : RGB les caméras font le travail de conversion le débit nécessaire : 2x93.4 Mo/s (> 75Mo/s : débit FW max) il faut découper les images et renoncer à RGB 2ème choix : YUV422 les caméras travaillent mais 2 fois mois de chrominance pour une découpe de 1200x512 : 2x30.72 Mo/s le GPU doit convertir en RGB avant la rectification 3ème choix : niveaux de gris on a perdu la couleur, cela ne nous intéresse pas Exemple de choix d'implantation 4ème choix : raw Bayer les caméras vont chômer ! mais on gagne 10-15 ms ... on a information mais le GPU devra travailler ... mais pas plus dur que pour le 2ème choix ! pour la même bande passante on peux se payer le lux de transmettre toute l'image : 2x31.1 Mo/s ! Que fait le GPU ? Interpolation Bayer : plus simple que les multiplications pour les conversion YUV Î RGB Rectification épipolaire Comment ? En utilisant les textures En utilisant pas les textures Utilisation des textures Utilisation des surfaces L'interpololation sera faite par les coeurs GPU sans faire appel aux unités de calcul des textures : Le calcul est plus rapide que l'écriture des 3 textures précédentes ! Peut-on aller plus loin ? Au lieu d'interpoler par pas de 1.0, on peut faire directement la rectification épipolaire ! Il suffit de précalculer les coefficients de la carte de déformation en fonction des voisins existants. Perspectives et conclusions Dans la conception des systèmes complexes la première impression ne pas forcement la meilleure L'optimisation de tels systèmes dépend de beaucoup trop de facteurs pour envisager une exploration complète de l'espace des possibilités Les facteurs de robustesse, consommation, coût sont parfois aussi importants que le reste ... Et il reste une nombre important de briques à optimiser, pour les faire tourner en temps réel. Envisager l'aide de NVidia pour une extension de Direct GPU aux drivers FireWire sous Windows "Normalisation" des stress-tests d'un véhicule semiautonome