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, 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 coeur), en comparaison avec le nombre de coeurs 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. 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 coeurs 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. Les GPU intégrés les plus connus sur les systèmes embarqués – dont les smartphones et les tablettes – sont les GPU intégrés ARM et Qualcomm. ARM propose la famille de GPU Mali avec les processeurs cortex-A allant jusqu’à 16 cores [29, 30]. De son côté, Qualcomm commercialise dans les SoC Snapdragon, les GPU Adreno. Ces GPU sont ceux utilisés dans la plupart des smartphones haut de gamme [31]. En plus de ces deux compagnies, citons également Vivante, PowerVR, et NVIDIA qui propose ses GPU Tegra pour les applications embarquées et intégrées nécessitant des performances plus élevées [32, 33].
La modélisation de la puissance et de l’énergie consommée
Dès l’introduction des smartphones modernes en 2007, les difficultés rencontrées ont été l’estimation de l’autonomie [39] et la prédiction de la durée de vie restante de la batterie [40]. Face à ces appareils livrés avec une source d’énergie limitée, des développeurs ont étudié leur autonomie [41, 42] et construit des modèles de consommation de puissance [43]. La problématique majeure concernant ces appareils concerne la dualité performance-consommation de puissance. Cela consiste à augmenter les performances des systèmes tout en maintenant une consommation d’énergie minimale. Ainsi, l’amélioration de l’efficacité énergétique est devenue l’objectif majeur des industriels et académiciens [44, 45], ce qui explique les nombreux travaux sur le sujet [46–52]. En effet, les deux secteurs – scientifique et industriel – travaillent activement pour atteindre cet objectif [52–54]. Les solutions proposées sont variées. Les articles [55–58] proposent des solutions algorithmiques telles que l’ajustement dynamique de la tension et de la fréquence des CPU (Dynamic Voltage and Frequency Scaling, DVFS), tandis que [59, 60] s’intéressent au DVFS dans les GPU. D’autres travaux proposent la limitation de puissance consommée [49] ou des algorithmes améliorant l’utilisation des ressources ainsi que la distribution des tâches[61, 62].
Citons de plus Marz et al. [63] qui se penchent sur l’optimisation des Frameworks des applications, et Lu et al. [64] qui se focalisent sur l’amélioration de la consommation électrique des écrans et proposent des solutions techniques tels que la réduction des résolutions des écrans. Enfin, relevons les travaux proposant des études de l’influence des applications et des interactions des utilisateurs avec le système sur la consommation d’énergie [34, 65–68], parfois à l’aide d’approches statistiques à grande échelle [69, 70]. Cette problématique continue d’être étudiée afin d’améliorer la précision des modèles d’estimation, et d’intégrer les nouvelles technologies [41, 71]. En outre, avec l’émergence de l’IoT et l’omniprésence des systèmes embarqués, surtout dans les systèmes critiques, l’intérêt porté à l’étude et la modélisation de ces systèmes ne se limite plus aux systèmes mobiles, mais englobe désormais la plupart des systèmes électroniques embarqués [49, 72–74]. L’étude de la consommation d’énergie des systèmes embarqués a également permis aux chercheurs d’identifier et de résoudre des bugs entraînant une consommation excessive d’énergie [75–77], et de créer des logiciels écoénergétique (optimisés pour avoir une consommation réduite) [78]. En outre, Suarez-Tangil et al. [79] ont utilisé le profil de la puissance consommée pour la détection d’anomalie dans le système, tandis que [80] l’ont employé afin de développer une méthode pour la détection de logiciels malveillants. Afin d’estimer ou de mesurer la puissance consommée par les systèmes embarqués ou mobiles, les concepteurs sont généralement amenés à construire des profilers. Ces derniers sont des outils permettant la collection cyclique des mesures ou l’estimation des variables désirées (dans ce cas, il s’agit de la puissance). Ils varient en complexité et en fonctions, du simple enregistreur [81] au profilers basés sur des modèles complexes capables d’estimer l’énergie consommée par les instructions [54]. Il existe trois revues principales dans la littérature détaillant les profilers et la modélisation de la puissance dans les smartphones [82, 43, 83]. La première est le travail de Hoque et al. [82], dans lequel, les auteurs présentent les différents mécanismes de mesure de l’énergie (instruments externes, capteurs internes, etc.), les types de modèles (modèles basés sur l’utilisation, les événements et l’analyse du code), les philosophies de modélisation (boîte blanche ou boîte noire) et les approches de profiling. Les auteurs ont de plus proposé une taxonomie des profilers et modèles étudiés en fonction de leur déploiement et le lieu de la construction du modèle, soit en interne sur le système, soit en externe (en de hors du système) [82].
Introduction générale |