Codage Graphique Reconfigurable pour maillage 3D
Transcription
Codage Graphique Reconfigurable pour maillage 3D
Codage Graphique Reconfigurable pour maillage 3D Christian Tulvan et Marius Preda Institut Telecom, ARTEMIS, Telecom Sudparis (UMR 8145), 9, rue Charles Fourier, 91000 Evry, France [email protected] [email protected] Résumé L’objectif de cet article est d'introduire le concept de codeur graphique reconfigurable et de présenter une librairie des unités fonctionnelles permettant le décodage des objets graphiques 3D. L'hétérogénéité de la représentation (non-compressée) des objets graphiques 3D rendent nécessaire la coexistence d'une multitude des schémas de compression, une spécifique pour chaque représentation. Même si intrinsèquement ces schémas partagent les mêmes composantes classiques de traitement de signal, il est impossible aujourd'hui de les rendre interopérables. Nous proposons de résoudre ce problème par l'identification des unités fonctionnelles qui seront connectées qu'au moment de décodage sur la base d'une information qui va accompagner le bitstream à décoder. Ce principe permet par ailleurs l'implantation spécifique des unités fonctionnelles et la gestion optimisée du calcul par rapport à l'architecture matérielle (CPU, GPU, FPGA, …) Mots clés Compression, reconfigurabilité, architecture parallèle. 1 Introduction Étant donné la multiplication des objets graphiques 3D, notamment dans des applications multimédias interactives et en ligne (par exemple les jeux) la nécessité de traitement et de compression des maillages 3D pour le stockage et la transmission efficace devient de plus en plus importante. Les techniques de compression de maillage 3D ont fait l’objet de divers travaux de recherches centrés principalement sur l’efficacité de la compression. Parmi les technologies de l'état de l'art nous retrouvons le standard MPEG-4 qui inclue des techniques de codage de maillage 3D (3DMC) [1-2]. Même si ce standard répond aux critères de compression requises par la majorité des applications, il est très peu implémenté dans l’industrie. Les principaux obstacles à cette implémentation sont le niveau élevé de complexité des processus de codage et décodage notamment pour de dispositifs mobiles ou nécessitant du rendu en temps réel, la complexité de développement et le faible degré de réutilisation. Par ailleurs, même si la fréquence des processeurs ne double plus chaque deux ans, comme prédit par Moore en 1965, les architectures multi-cœurs et mixées (CPU et GPU, CPU et FPGA) font que les performances computationnelles augmentent. La difficulté de cette nouvelle approche consiste dans le fait que les langages de programmation standards sont en principe séquentiels et doivent être modifiés ou utilisés d'une manière spécifiques pour profiter des architectures parallèles. D'un point de vue recherche, la réalisation d'outils permettant de produire un prototype rapide en combinant des parties algorithmiques traitées comme des fonctions mathématiques et qui prennent en compte la plateforme matérielle sur laquelle l'opération et réalisée, incluent la gestion du parallélisme, est prioritaire. Dans ce cadre, le concept de programmation par flux des données consiste à décrire une application comme un ensemble des modules implémentent les fonctionnalités et dans un graph directionnel représentent le flux des données entre les modules. Ce model met en évidence le parallélisme potentiel de l'application ou le calcul peut être distribué parmi les cœurs de traitement disponibles voir dédiés (comme le calcul mathématiques de base sur le GPU). Actuellement, il existe plusieurs bibliothèques qui implémentent différents encodeurs pour les objets multimédia. Cependant la plupart d’entre eux est centrée dans les processus de CPU et a un faible degré de parallélisme [5]. En autre, il n’existe pas, à notre connaissance, des IP-Cores publiques pour le décodage des objets graphiques 3D. Cet article est organisé comme suit. Dans la section 2, nous présenterons les principales caractéristiques du codec reconfigurable d’objets 3D (RGC). La section 3 introduit la librairie d’outils graphiques (GTL - Graphics Tool Library) permettant une production de prototypes plus rapide et une implémentation flexible dans différentes plateformes (en software et hardware). Basé dans ce GTL, nous présenterons comment un schéma de compression standard, le QBCR, peut être instancié. Nous concluons l'article et présentons les perspectives dans la dernière section. 2 Le codeur reconfigurable pour les objets graphiques – RGC (Reconfigurable Graphics Codec) L'approche que nous proposons pour le décodage des objets 3D sur architecture parallèle est basée sur le concept de reconfiguration MPEG RVC (Reconfigurable Video Codec) [6-8]. Le standard MPEG RCV définie la méthodologie et les spécifications de la technologie pour le codage reconfigurable des vidéos. Sa principale innovation se trouve dans l’adoption d’un modèle de flux de données qui utilise le langage RVC-CAL. MPEG RVC associe également un langage pour la spécification des réseaux d'interconnexion, le FNL [9]. Le concept de la programmation par flux de données consiste à décrire une application comme une série de modules qui implémentent les fonctionnalités unitaires et un graph dont les arrêts représentent le flux de données entre les modules. La programmation des flux de données met en avant le parallélisme potentiel de l’application qui peut être utilisé pour distribuer les calculs entre les cœurs disponibles. Le langage CAL (Client Access Licence) est une notation textuelle qui permet la représentation de flux de données, des acteurs et leur fonctionnalité. Il a été conçu de façon à permettre la description des acteurs en fournissant des informations statistiquement analysables de leur comportement comme le sont le nombre de jetons produits et consommés à chaque déclanchement, les conditions qui permettent l’action de ce déclenché, la description des priorités des actions et leur dépendance. En utilisant CAL, une application est définie comme une représentation de flux de données abstraites capable de produire des données prêtes pour la compilation ou de synthétiser du code. A ce stade, il est possible de produire des versions C, C++, Java et VHDL à partir de la conception abstraite (Figure 1). Pour faire face aux restrictions de conception de software et hardware, le langage abstrait connait certaines limitations qui définissent la complexité des opérations que les FUs peuvent exécuter, la façon dont deux ou plusieurs FUs échangent l’information et leur comportement. FIFO PORT_i FU 1 FIFO FU 2 FU 3 FIFO FIFO FIFO Figure 1 : Processus d’adaptation de langage par CAL. FU 2 PORT_o Figure 2 : Exemple de processus par FIFO. Le FU représente un élément de traitement de données et a pour but de consommer et produire des sous-ensembles de données appelés jetons. Le processus de communication entre deus ou plusieurs FUs implique l’introduction d’un mécanisme FIFO (premier entré, premier sorti) pour chaque canal de communication. FIFO permet aux FUs de produire et consommer les données dès qu’elles sont prêtes. Un exemple d’architecture est présenté dans la Figure 2. Dans le cadre RVC-CAL, un acteur est un composant modulaire qui peut encapsuler sont propre état sans avoir accès, ni pouvant modifier un autre acteur. Cet acteur exécute les calculs comme une séquence appelés firings (déclanchements). Lors de ces déclanchements, les calculs se font en une action choisie parmi les différentes actions qu’un acteur peut avoir. Une action est capable de changer le statut de l’acteur. Elle définie la quantité de jetons consommés à l’entrée et peut rendre des jetons. Sur la base de concepts définis en RVC, qui prévoit l'implantation pour la vidéo (et propose donc un ensemble des FUs traitent de la vidéo), nous allons introduire dans la section suivante un ensemble des FUs pour le décodage des objets 3D, groupés dans la bibliothèque GTL (Graphcis Tool Library). 3 Librairie d’outil graphiques (GTL) La GTL représente une collection de FUs qui sont développées en utilisant le langage RVC-CAL. La fonctionnalité ainsi que les interfaces d'entrée-sortie de chaque FU sont décrites et permettent un certain niveau de flexibilité d’instanciation. Il est possible que plusieurs FUs ont la même fonctionnalité mais des interfaces différentes, permettant ainsi au développeur de l'application de choisir celles les plus adaptées à l’implémentation. 3.1 Le design du flux des données Afin de décrire le flux des données, il est nécessaire de défier un réseau qui connecte plusieurs FUs du GTL pour construire une fonctionnalité donnée. Changer ou ajouter une nouvelle fonctionnalité de l'ensemble consiste ainsi dans le remplacement ou l'ajout d'une ou plusieurs FUs de la GTL. Le réseau d'interconnexion entre les FUs est décrit en utilisant le langage XML qui fait référence à des instances des FUs. Specifiquement, le formalisme FNL est utilisé. Le dernier, s'appuie sur le format utilisé en environnement Open DataFlow et il est normalisé par MPEG. Le FNL a le support pour la déclaration des variables locales, l'instanciation des blocks avec des paramètres et la hiérarchie: les blocks peuvent être des FUs ou des réseaux des FUs. En opposition à d'autres langages de l'environnement Open DataFlow, le FNL ne peut pas créer des réseaux de manière programmatique. La Figure 4 représente un exemple d’un réseau connectant trois FU décrivant une fonctionnalité complexe et le code associé. FU 1 Data1_o Data2_o Data3_o Data4_o FU 2 Data1_i Data2_i Data3_i Data4_i Data5_o FU 3 Data1_i <?xml ver sio n="1.0" encoding="UT F-8"?> <XDF name="fnlT est "> <Inst ance id="FU1"> <Class name="../GTL/ FU 1"/ > </Inst ance> <Inst ance id="FU2"> <Class name="../GTL/ FU2"/ > </Inst ance> <Inst ance id="FU3"> <Class name="../GTL/ FU3"/ > </Inst ance> <Connect io n dst ="FU2" dst -port ="Dat a1_i" <Connect io n dst ="FU2" dst -port ="Dat a2_i" <Connect io n dst ="FU2" dst -port ="Dat a3_i" <Connect io n dst ="FU2" dst -port ="Dat a4_i" <Connect io n dst ="FU3" dst -port ="Dat a1_i" </XDF> src="FU1" src="FU1 " src="FU1" src="FU1" src="FU2" sr c -port ="Dat a1_o"/> sr c-port ="Dat a2_o"/> sr c -port ="Dat a3_o"/> sr c -port ="Dat a4_o"/> sr c -port ="Dat a5_o"/> Figure 4 : Exemple de réseaux et code FNL associé. En fonction du dispositif visé, la conception nécessite une traduction à partir du niveau abstrait vers un code qui soit prêt à être compilé (software) ou synthétisé (hardware). En exécutant un outil appelé ORCC-compiler, le code à niveau abstrait est compilé dans un langage intermédiaire pour ensuite être traduit au langage souhaité (C, C++, Java ou VHDL). Au même temps que le code, les fichiers du projet sont crées s’après la définition du réseau (CMake, VS project, VHDL top-level). 3.2 Unités Fonctionnelles (FUs) De façon à rendre plus claire l’organisation du GTL, ses composants doivent être divisées entre différentes catégories d’après leur utilisation dans le processus. Ainsi, nous pouvons distinguer : a) Les FUs qui sont utilisées pour fournir les données à traiter et stocker : ces FU sont nécessaires au processus de développement pour simuler des comportements de système avec de vraies données d’entrée. Par exemple, dans l’implémentation d’un décodeur, les données sont reçues généralement comme un flux provenant de la source de stockage ou du réseau. Ils transmettent les données au modules de traitement (par exemple, la transmission de données à un module de rendu 3D ou directement dans une mémoire vidéo comme structure 3D) et si nécessaire il convertit les structures de données à un format commun. En général, ses FUs sont développées en utilisant le code visé (C, C++, Java ou VHDL) et ne sont instanciées que lors de la conceptualisation. b) Les FUs utilisées dans l’algorithme d’implémentation. Typiquement, les FUs qui peuvent implémenter les fonctionnalités des algorithmes sont développées en utilisant le langage RVC-CAL comme la composante modulaire du projet. Elles implémentent des fonctions bien définies et agissent indépendamment mais sont capables d’échanger des données à travers les ports de connexion. Un exemple d'un FU algorithmique (quantification inverse) est présenté dans la Figure 5. Basé sur les informations obtenues par les QP, la FU utilise la fonction inverse appropriée avec les paramètres quantMin et quantRange. Les données d'entrée sont représentées en 8 bits après traitement, les données résultantes sont représentées par des entiers de 32 bits. Le nombre de jetons lus peut différer selon le type d’opération inversée. Cette opération n’est pas dépendante de la taille du réseau étant donné qu’elle n’utilise qu’un élément (1, 2 ou 3) et traite l’intégralité du flux d’entrée. c) Les FU nécessaires dans l’implémentation du processus de débogage. Le but de ses FUs est de permettre au développeur de déboguer une FU des catégories précédentes à partir des données d’entrée (valeur et ordre) sous forme d’un espace de mémoire accessible ou directement stockés dans le fichier. Cela permet l’analyse des contenus et des jetons ordonnés produits dans la conceptualisation. Un des plus grands avantages d'un FU de débogue est qu’il est capable de reproduire les données d’entrée et sortie, permettant une conceptualisation en temps réel. Port Name Data_i QuantValue_i quantMin_i quantRange_i Data_o Data Type Int UInt UInt UInt UInt Data Width 8 8 32 32 32 I/O I I I I O Figure 5 : Quantification inverse de FU En analysant différentes méthodes de compression de maillage 3D, nous avons réalisé le design des 8 FUs. La description complète de ces FUs est disponible à l'adresse www.MyMultimediaWorld.com/Projects/CALDER. Une fois la bibliothèque GTL disponible, il est possible d'implanter un décodeur spécifique en connectant d'une certaines manière les différents FUs. Nous nous intéressons eux décodeurs MPEG-4 3D, et plus spécifiquement au décodeur SC-3DMC (Scalable Complexity 3D Mesh Coding) [10]. Le dernier a la spécificité de permettre le ciblage de la plateforme de décodage par rapport à ses performances matérielles, étant ainsi possible de sélectionner des jeux des paramètres de compression différents: si le terminal a des capacités réduits en mémoire et puissance de calcul, une des approches QBCR ou SVA peut entre utilisée, sinon l'approche TFAN va être utilisée. Comme attendu, les performances de compression sont meilleures quand TFAN est utilisé car cette méthode permet une analyse de la connectivité du maillage. Basé sur des FU qui font actuellement partie du GTL, le codeur QBCR a été instancié. La Figure 6 représente une partie de ce codeur, à savoir le décodeur géométrique de l'approche QBCR. Figure 6 : Décodeur géométrique QBCR. 4 Conclusion Le concept RGC permet l’implémentation d’une conceptualisation flexible en divisant un décodeur en différentes unités fonctionnelles (appelées FUs) et dans des sous-réseaux qui agissent indépendamment et communiquent à l’aide de méthodes définies. Dans cet article nous avons présenté la conceptualisation d’un codec graphique reconfigurable (RGC) en définissant la librairie graphique et ses composants, les FUs. L’instanciation pour un codeur specifique, le QBCR est également présentée. Les FUs et le cadre RGC s'avère être un outil permettant de produire des prototypes en combinant des fragments d’algorithmes et de réduire le temps de développement. Du point de vue de l’optimisation par rapport à le terminal ciblé, le RGC permet la définition locale des FUs et il est capable d’assurer une gestion efficiente et simple de l'implantation parallèle. Les perspectives de ces travaux consistent en compléter l'ensemble des FUs de la bibliothèque afin d'obtenir les deux autres instances definies par MPEG-4 SC-3DMC, le SVA et le TFAN. A noter que le RGC a été récemment (Avril 2011) retenu comme projet de standardisation par MPEG qui prévoit sa publication comme standard ISO en 2012. 5 Remerciements Ces travaux ont été réalisés dans le cadre des projets ANR CALDER et MediaGPU. Références [1] ISO/IEC14496-16:2006, "Part 16: Animation Framework eXtension (AFX) Amendment 1: Geometry and Shadow ", ed, 2007. [2] J. Peng, et al., "Technologies for 3D mesh compression: A survey," Journal of Visual Communication and Image Representation, vol. 16, pp. 688-733, 2005. [3] R. Da Qi, et al., "Power performance analysis of 3-D finite element mesh refinement with tetrahedra by CUDA/MPI on multi-core and GPU architecture," in Electromagnetic Field Computation (CEFC), 2010 14th Biennial IEEE Conference on, 2010, pp. 1-1. [4] L. Haller and S. Singh, "Relieving capacity limits on FPGA-based SAT-solvers," in Formal Methods in Computer-Aided Design (FMCAD), 2010, 2010, pp. 217-220. [5] X. Chen, et al., "Design and implementation of MPEG audio layer III decoder using graphics processing units," in Image Analysis and Signal Processing (IASP), 2010 International Conference on, 2010, pp. 484-487. [6] E. Bezati, et al., "RVC-CAL dataflow implementations of MPEG AVC/H.264 CABAC decoding," in Design and Architectures for Signal and Image Processing (DASIP), 2010 Conference on, 2010, pp. 207-213. [7] K. Jerbi, et al., "Fast Hardware Implementation of an Hadamard Transform Using RVC-CAL Dataflow Programming," in Embedded and Multimedia Computing (EMC), 2010 5th International Conference on, 2010, pp. 1-5. [8] F. Palumbo, et al., "RVC: A multi-decoder CAL Composer tool," in Design and Architectures for Signal and Image Processing (DASIP), 2010 Conference on, 2010, pp. 144-151. [9] I. I. 23002-4, "Part 4: Video tool library," ed, 2009. [10] ISO/IEC14496-16:2011, Marius Preda (Editor) "Animation Framework eXtension (AFX) 4th Edition", www.iso.ch, Geneva, 2011.