Modélisation Incrémentale des Processeurs Embarqués pour l’Estimation des Caractéristiques et le Diagnostic
Architecture des systèmes hétérogènes embarqués et mobiles
Les systèmes informatique à GPU comprennent deux types de microprocesseurs, un processeur central de calcul et un processeur graphique. Ce type de système – contenant deux processeurs de nature différente – est dit hétérogène.
Les systèmes hétérogènes
Les systèmes hétérogènes sont décrits par deux caractéristiques principales : le nombre des sous-systèmes fonctionnels et des circuits processeurs qu’ils contiennent, et les sous-systèmes de mémoires dédiées à chacun des sous-systèmes fonctionnels [24]. L’un des exemples les plus célèbres des SoC hétérogènes sont les SoC conçus sous les normes de la fondation « The Heterogeneous System Architecture » (L’Architecture des Systèmes Hétérogènes, HSA), une fondation créée par de multiples fournisseurs de semi-conducteurs comme AMD et ARM [10, 25]. AMD : un exemple des systèmes hétérogènes (Source : [10]). MMU : Memory Management Unit (Unité de gestion mémoire). CU : Compute Unit (Unité de calcul). La Figure I.1 montre les éléments principaux d’une Unité de Calcul Accélérée (Accelerated Processing Unit, APU) de AMD, utilisant l’architecture HSA. Cette APU contient deux sous-systèmes fonctionnels : un CPU et un GPU. Les deux processeurs sont placés sur le même SoC avec un contrôleur de mémoire (Memory Management Unit, MMU) et partagent la même mémoire vive (Random Access Memory, RAM). L’une des particularités de cette architecture est qu’elle permet aux programmes d’utiliser le GPU pour les calculs en virgule flottante, sans ordonnancement particulier ou séparation de mémoire [10]. Dans le projet MMCD, les systèmes embarqués envisagés utilisent un SoC hétérogène basé sur l’architecture de ARM. Dans la suite de cette section, nous allons donner une brève description de l’architecture de cette famille de SoC.
Les SoC basés sur l’achitecture ARM
La Figure I.2 montre le schéma blocs d’un SoC d’application basé sur les processeurs ARM avec deux processeurs : Un Cortex-A9 et un Cortex-M4. La figure montre aussi tous les modules et composants inclus dans le SoC, comme les modules de communication (Ethernet, USB. . . ), les mémoires (RAM, ROM), et les modules de contrôle. FIGURE I.2 – Le schéma blocs d’un SoC basé sur l’architecture ARM à deux processeurs : Un Cortex-A7 et un Cortex-M4 [11].
Les processeurs basés sur l’architecture ARM
Les SoC ARM utilisent des processeurs basés sur l’architecture du même nom. Ces processeurs ont un jeu d’instructions réduit (Reduced Instruction Set Computers, RISC). Dans cette architecture, les CPU sont conçus pour exécuter un nombre réduit d’instruction de base avec pour objectif – dans la majorité des cas – d’exécuter une instruction par un cycle d’horloge. Ceci est obtenu en fixant la longueur des champs d’instructions afin de simplifier le décodage de ces dernières. En outre, ces processeurs ont un mode d’adressage simplifié avec l’architecture chargement/stockage (load/store architecture), où toutes les opérations sur les données sont exécutées uniquement sur des registres. En plus de l’architecture RISC de base, les processeurs ARM sont aussi dotés de fonctionnalités permettant de contrôler les unités arithmétiques et logiques (UAL), le chargement et le stockage de plusieurs instructions, ainsi que l’exécution d’une instruction sur plusieurs données (Single instruction Multiple Data, SIMD). Ces améliorations apportées à l’architecture RISC de base permettent aux processeurs ARM un meilleur équilibre entre les performances, la consommation d’énergie, et la taille de la puce. Grâce à cet équilibre, les SoC à base de processeurs ARM dominent le marché des systèmes embarqués, notamment dans le secteur des systèmes mobiles, et l’Internet des Objets (Internet of Things, IoT). Les processeurs ARM sont divisés en trois familles : Les Cortex-A, Cortex-M, et Cortex-R. Les Cortex-A sont des processeurs d’application, généralement destinés au grand public. Ils sont conçus pour offrir des performances élevées avec une consommation d’énergie relativement faible. Comme leur nom l’indique, ces processeurs sont destinés à être utilisés en application (Smartphones, 10 État de l’Art de la Modélisation des Processeurs Embarqués et Mobiles Hétérogènes Tablettes, appareils photos, etc.). Par conséquent, les systèmes utilisant ces processeurs fonctionnent généralement sous un système d’exploitation, et sont aussi dotés d’une unité de gestion de la mémoire (MMU). La seconde famille des processeurs ARM est celle des microcontrôleurs Cortex-M. Ces processeurs sont utilisés dans des systèmes fortement embarqués, qui nécessitent des traitements en temps réel et une consommation minime d’énergie comme les capteurs, les transmetteurs et les appareils utilisés dans l’IoT. La dernière famille regroupe les Cortex-R. Ces processeurs sont dits déterministes en raison de leur latence d’interruption faible. Cette propriété rend ces processeurs les plus adaptés aux systèmes à temps réel et critiques. Ils sont généralement utilisés dans les systèmes de contrôle et commandes avioniques, les automates programmables industriels, et les appareils médicaux.
Les processeurs graphiques embarqués et mobiles
Un GPU, par définition, est un processeur spécialisé pour le rendu graphique. Il est utilisé pour l’accélération des opérations visuelles [26]. Les GPU existent en plusieurs familles suivant leur implémentation et leur puissance de calcul, allant des processeurs graphiques de base utilisés pour les tâches d’affichage de l’interface utilisateur, le décodage des vidéos, et les simples rendu 3D, jusqu’aux processeurs dédiés aux jeux vidéo et aux stations de travail, capables de rendre des synthèses plus complexes en 3D [23, 27]. Contrairement aux CPU conçus pour avoir la plus petite latence possible et optimisés pour le branchement et les boucles (Figure I.3a), les GPU ont été et sont toujours conçus pour le traitement des graphismes, et leur architecture est optimisée à cette fin. Par conséquent, ils sont adaptés à l’exécution d’une seule instruction sur plusieurs données (SIMD), et une seule instruction sur plusieurs fils d’exécution : (Single Instruction, Multiple Threads, SIMT). Ainsi, les GPU sont plutôt conçus pour avoir throughput maximum [23]. Le throughput est défini comme la quantité totale de travail exécutée sur un temps donné [27]. Ainsi, un processeur conçu pour délivrer un grand throughput, comme les GPU, doit être capable d’exécuter plusieurs travaux en parallèle [24]. Pour ce faire, les GPU sont dotés d’un grand nombre d’unités de calcul (Appelées : CU, ou CUDA Core, ou cœur), en comparaison avec le nombre de cœurs dans les CPU. Toutefois, le grand throughput et la parallélisation des calculs, réduisent la nécessité d’une faible latence puisque la quantité de travail est ce qui prévaut. Ainsi, la plupart des GPU fonctionnent à des fréquences d’horloge modestes comparées à celles des CPU. La Figure I.3b explique la parallélisation des calculs et l’ordonnancement des travaux dans un GPU. Quand des travaux sont initialisés sur un GPU, ils sont organisés de sorte que ce dernier commence le premier travail et que durant le temps d’attente des données, il commence le second, et ainsi de suite jusqu’à la fin de tous les travaux. Une fois ceci fait, il reprend le premier travail dont les données sont disponibles et poursuit la tâche, et ainsi de suite. Cet ordonnancement, s’il est bien calculé, permet d’éliminer l’effet de la grande latence, parce que le processeur sera toujours occupé avec des calculs. Tˆache 1 Tˆache Tˆache 3 Ex´ecution et traitement Attente des donn´ees Changement de contexte Tˆache 2 (a) Travail 1 Ex´ecution Donn´ees prˆetes pour traitement Attente des donn´ees Travail 2 Travail 3 Travail 4 (b) FIGURE I.3 – La différences d’exécution des programme entre les CPU et les GPU : L’influence du temps de traitement et le temps d’attente. (a) L’exécution des tâches sur un CPU : (b) L’exécution des tâches sur un GPU. Les performances des GPU augmentent pour chaque nouvelle architecture, en particulier celles conçues par les plus grands constructeurs tels que NVIDIA et AMD. Cette course à la performance est surtout motivée par le rôle que jouent les GPU dans l’industrie du divertissement (Jeux vidéo, conceptualisation 3D, édition et rendu des vidéos). Néanmoins, La caractérisation les GPU uniquement par leurs tâches graphiques est limitante et dépassée. En effet, les tâches des GPU dépassent désormais le monde des graphismes et les rendus vidéos, et ils sont utilisés pour les calculs scientifiques, les simulations, et dans le domaine de l’Intelligence Artificielle (IA) grâce au nombre élevé des cœurs dont ils disposent [23, 27, 28]. Il n’existe pas de classification standard pour les GPU. Toutefois, nous parlons généralement de GPU intégrés et de GPU discrets (ou dédiés). Les GPU intégrés sont des GPU disposés sur le même SoC que le CPU et ils partagent généralement la même RAM. Par contre, les GPU discrets sont le plus souvent disposés sur leur propre circuit (dit carte graphique) et ont une mémoire séparée du reste du système. Dans les systèmes embarqués, la quasi-majorité des GPU sont intégrés. Ces derniers sont conçu pour les tâches générales d’affichage et de rendus 2D et 3D, ainsi que la lecture vidéo. Ils dominent le marché du grand public, notamment le secteur mobile (smartphone et tablette) où ils sont pratiquement les seuls à exister. L’un des plus grands avantages de ce genre de GPU est la mémoire partagée, qui permet un interfaçage facile avec les CPU. En outre, avec les outils logiciels comme l’OpenCL, ces GPU deviennent des ressources directement disponibles pour effectuer des tâches générales en plus des tâches graphiques. Ils ont aussi une consommation très faible en puissance comparée à celle des GPU dédiés, et deviennent le choix idéal pour les systèmes utilisant des batterie et les usages qui ne requiert pas une grande puissance graphique.
Abstract |