• Aucun résultat trouvé

2.4 Processeurs multi-cœurs pour l’avionique

2.4.1 Architectures multi-cœurs

Comme illustré sur la figure 2.2, on représente habituellement un processeur de ma- nière modulaire comme un ensemble d’unités matérielles, dont l’activité électronique per- met l’exécution du logiciel embarqué, et remplit les services offerts par le processeur. Ces unités matérielles sont en général des IP18, qui sont développées indépendamment pour

2.4. Processeurs multi-cœurs pour l’avionique

Reservation Station Fetch Stages

Branch Prediction Unit BTB 512 Entry CTR LR Instruction Unit Instruction Queue (12 instructions) Instructions pass Res Branch Unit GPR File LSU L2 MMUs CRF 128-Bit General Issue Queue (GIQ) Branch Issue

Queue (BIQ) Unified

Two Instruction Dispatch (1 BIQ, 2 GIQ, 1 FIQ)

Core Interface Unit

L1 Instruction MMU 64-entry I-L1TLB4K 8-entry I-L1VSP 32-Kbyte I Cache Station Memory Unit (4 Instructions) Tags Tags 32-Kbyte D Cache

Maximum Two Instructions

MAS Registers Instruction buffer Renames (14) Renames (14) GPR Bus Completion Bus CRF Bus CoreNet Interface One instruction

per unit/per cycle.

Res Station FPU (64 bit) FPU Issue Queue (FIQ) FPR File Renames (14) Station Simple Units Res Station Complex Unit Res Stations Simple Units (2) Completion Queue FPR Bus (14 Entry)

Retire per Cycle from IQ to the CQ at dispatch.

L1 Data MMU 64-entry D-L1TLB4K 8-entry D-L1VSP TLB array 64-entry (TLB0) TLB array (TLB1) 512-entry CR File Load/Store Queue & Buffers

Unified Backside L2 Cache

Pipeline Registres de configuration MMU Caches

Figure 2.3 – Description d’un cœur PowerPC de type e5500 (issue du manuel de référence [43])

être utilisées dans différents types de processeurs. Leurs activités, au niveau électronique, s’effectuent de manière concurrente.

Sur un processeur multi-cœurs, on peut rencontrer les types d’unités suivantes, qui sont illustrées sur la figure 2.2 :

les cœurs. Ils contiennent la logique nécessaire pour exécuter un programme et déployer un système d’exploitation. Cette logique comprend les unités suivantes (cf figure 2.3) :

Pipeline Le pipeline implémente dans des unités dédiées différents traitements effectués au cours de l’exécution de l’instruction. On rencontrera par exemple une unité pour charger les instructions, plusieurs unités arithmétiques et lo- giques capables d’effectuer des opérations entières ou flottantes, une unité capable de lire et écrire des données vers la mémoire principale.

MMU. Les cœurs utilisés dans l’avionique disposent d’une MMU19. Il s’agit d’une unité matérielle chargée de la traduction d’adresse entre l’espace effectif, vu

19. Memory Management Unit

Chapitre 2. Contexte Avionique

par le logiciel, et l’espace physique, vu par le processeur. Elle est également en charge de vérifier les droits d’accès.

Caches. Les caches agissent comme des mémoires de petite taille à accès rapide. Ils disposent d’une politique de remplacement, et permettent d’améliorer si- gnificativement les performances du logiciel embarqué.

Registres d’états et de configuration. Un cœur embarque un certain nombre

de registres de configuration, dont la connaissance fine est nécessaire dans un usage avionique.

Les unités de communication. On trouve en général dans un processeur un compo-

sant central appelé interconnexion, bus ou NoC20 dans le cadre de processeurs massivement multi-cœurs. L’interconnexion a pour fonction de propager des tran- sactions, qui matérialisent les interactions entre les différents composants du pro- cesseur.

Les caches partagés. On trouve souvent en amont de la mémoire principale un ou

plusieurs niveaux de caches qui sont accessibles par plusieurs cœurs. Ces caches partagés s’inscrivent dans la mémoire hiérarchique.

Les contrôleurs mémoire. Leur rôle est d’implémenter le protocole de communication avec les mémoires. Les contrôleurs vers la mémoire principale, qui est en général de type DDR21 sont les plus complexes.

Les contrôleurs de périphériques. Il s’agit d’unités matérielles qui implémentent des protocoles de communication sur des périphériques tout en en masquant leur complexité au logiciel embarqué. À titre d’exemple, on peut considérer les bus PCIe, PCI et CAN qui sont utilisés dans les systèmes avioniques. Un contrôleur de périphériques dispose d’une interface de configuration qui est programmable. Les accélérateurs matériels. Ce sont des unités qui ont pour but de réaliser efficace-

ment certaines opérations très spécifiques afin d’en décharger les cœurs. Ces opé- rations concernent par exemple le transfert de données depuis et vers la mémoire que peut effectuer un contrôleur DMA22. On rencontre également des accéléra- teurs pour le traitement de paquets sur un réseau ethernet, des co-processeurs pour les opérations vectorielles efficaces pour le traitement du signal, ou encore des coprocesseurs spécialisés dans le traitement de flux videos. À l’exception des contrôleurs DMA, ces composants ne sont pas considérés dans notre étude car pas utilisés dans les calculateurs avioniques.

Le contrôleur d’interruptions. Le contrôleur d’interruptions agit comme un routeur, qui redirige les interruptions générées par des évènements matériels vers un ou plu- sieurs cœurs. Les deux standards existants sont APIC23 qui est implémenté dans les processeurs Intel et AMD, et OpenPIC qui est utilisé par la majorité des pro- cesseurs PowerPC, ainsi que dans de nombreuses implémentations de processeurs ARM.

20. Network on Chip 21. Double Data Rate 22. Direct Memory Access

2.4. Processeurs multi-cœurs pour l’avionique

Les ressources de debogage et de monitoring. Ces ressources ont pour objectif de

fournir des informations sur le fonctionnement du processeur. Ces informations ont pour finalité de diagnostiquer des sources de bugs dans le logiciel embarqué et dans le matériel, mais aussi de localiser les ressources ou les phases d’exécution dont l’efficacité pourrait être améliorée. On distingue deux types de ressources : les moniteurs de performances, qui sont des compteurs qui s’incrémentent lors des occurrences de certains évènements, et les modules de trace, qui maintiennent un historique de toutes les occurrences de certains évènements.

On peut regrouper les composants –que nous désignons également par le terme “périphériques”– décrits ci-dessus en trois catégories. Les périphériques dits maîtres sont proactifs. Ils initient de l’activité dans le processeur. On retrouve les cœurs, les contrô- leurs DMA et certains contrôleurs de périphériques comme les contrôleurs de bus PCIe. À l’inverse, les composants esclaves n’initient pas d’activité mais répondent à celle qui est initiée par les périphériques maîtres. Enfin, l’interconnexion est un périphérique de communication, dont le seul rôle est de propager et contrôler l’activité qui résulte des échanges entre composants maîtres et esclaves.

La complexité électronique d’un processeur multi-cœurs est au final proche de celle d’un processeur mono-cœur. On présente souvent cette technologie comme étant en rup- ture, notamment du fait de la présence d’activités électroniques concurrentes émises par les cœurs à destination de ressources partagées. Bien qu’électroniquement des situations similaires existent sur des processeurs mono-cœurs, par exemple en activant des DMA, on trouve des problématiques purement spécifiques aux processeurs multi-cœurs. Nous développons certaines d’entre elles dans la section suivante.