• Aucun résultat trouvé

Résumé en français (French summary) Contents

8.2 Utilisation de l’ ISS basé sur la traduction binaire dans la sim- sim-ulation dirigée par événements

8.2.2 La modélisation du temps

8.2.2.2 Niveaux de précision

La plate-forme de simulation peut être configurée pour être plus ou moins précise. Toutes les configurations comprennent laMMUfournie par le simulateur initial.

La première configuration de la plate-forme de simulation, appelée configuration "cache full", la plus précise, implémente totalement les caches et utilise de(s) module(s) SystemC pour la mémoire principale (Figure 8.8). Les explications de toute cette section se concentrent sur cette configuration. Le temps requis pour exécuter le nombre de cy-cles correspondant aux instructions simulées est consommé en utilisant la fonction wait SystemC.

Les caches d’instructions et de données sont implémentés par chaque adaptateur du processeur. Dans l’implantation actuelle, les caches sont placés après laMMU, ils sont donc adressés physiquement. Ils sont "direct mapped" et utilisent la politique write-through. Toutefois, les principes présentés ici peuvent être utilisés avec d’autres stratégies de cache.

Target code instr1_reg_operation Instr address 18 instr2_load_from_1000 instr_cache_verify (18);

nb_cycles += cpu_datasheet [instr1]; micro-op1_for_instr1

micro-opN1_for_instr1

1C nb_cycles += cpu_datasheet [instr2];

data_cache_verify (1000); micro-op1_for_instr2 micro-opN2_for_instr2

20 instr3_store_5_to_2000

nb_cycles += cpu_datasheet [instr3]; write_access (2000, 5); micro-op1_for_instr3 micro-opN3_for_instr3 instr_cache_verify (20); micro-op1_for_instr1 micro-opN1_for_instr1 micro-op1_for_instr2 micro-opN2_for_instr2 micro-op1_for_instr3 micro-opN3_for_instr3 List of micro-operations

generated by QEMU Annotated list of micro-operationsgenerated by QEMU

Figure 8.7: Exemple d’annotation de la liste des micro-opérations générées par le simula-teur basé sur la traduction binaire initial

Par opposition à la simulation native ou simulation compilée [GGP08,vM96], la traduc-tion binaire utilise l’adresse exacte pour obtenir des instructraduc-tions cherchées et pour accéder aux données. Toutefois, les instructions cible sont récupérées de la mémoire principale une seule fois, pour la traduction, avant leur première exécution. Les instructions nécessaires pour la traduction sont recherchées directement dans le module mémoire, sans émettre une requête sur l’interconnexion (temps zéro pour SystemC). Le prix de chargement sera payé par le cache d’instructions (en fonction instr_cache_verify de la Figure 8.7) lorsque le code généré sera exécuté à partir du cache de translation.

Un défaut de cache d’instructions ou de données émet une requête sur l’interconnexion pour charger la ligne de cache. Comme le simulateur exécute toujours le code binaire hôte généré et stocké dans le cache de traduction, la partie donnée du cache d’instruction est ignorée. Les messages de cohérence peuvent être envoyés aux autres caches.

La communication avec d’autres périphériques s’effectue en envoyant des requêtes sur l’interconnexion. Le temps consacré à ces accès se compose du temps consommé par chaque composant SystemC impliqué dans la transmission et la réception des paquets de requête.

C’est la configuration la plus précise de notre plate-forme de simulation, sa précision ne dépend que de la précision de la modélisation des composants de la plate-forme SystemC. En outre, la simulation pour cette configuration est la plus lente, comme les demandes et les réponses passent toutes par les composants SystemC qui sont nécessaires pour les transférer.

La deuxième configuration de la plate-forme de simulation, appelée configuration "no-cache", n’implémente pas les caches et utilise la mémoire principale interne allouée par le simulateur initial (Figure 8.9). Dans cette configuration, on considère que la mémoire est toujours disponible pour tous les processeurs, sans aucun coût en cycle pour y accéder. Comme dans la configuration précédente, les opérations d’I/O impliquent l’interconnexion et d’autres composants matériels SystemC.

Dans cette configuration, un processeur simulé se synchronise avec le reste de la plate-forme SystemC uniquement lorsqu’une opération d’I/O est exécutée et lorsque la fonc-tion d’ISS retourne. En raison du nombre restreint de synchronisation SystemC, de gros

8.2 Utilisation de l’ISSbasé sur la traduction binaire dans la simulation dirigée par événements

CPU Instruction

cycles accessRAM Peripheralsaccess

Instruction cache Interconnect Data cache Other peripherals RAM Time consumed locally with SystemC wait function Request sent over the

interconnect

Figure 8.8: Le niveau de précision "cache full"

morceaux de code traduits sont exécutés sans avoir à recourir à SystemC. En conséquence, la simulation sera très rapide (proche du simulateur initial). La précision dans ce cas sera faible car les effets de cache et le temps nécessaire pour communiquer avec la mémoire principale sur l’interconnexion ne sont pas comptés. Comme tous les accès mémoire se font sans passer par l’interconnexion, il n’y a pas besoin d’un support explicite à des mé-canismes de cohérence de cache.

Interconnect CPU Instruction

cycles accessRAM Peripheralsaccess

Other peripherals Time consumed locally with SystemC wait function Time ignored Request sent over the

interconnect

Figure 8.9: Le niveau de précision "no cache"

Dans la troisième configuration de la plate-forme de simulation, appelée configuration "cache wait", les caches sont implémentés seulement du point de vue présence/défaut. Cette configuration utilise la mémoire centrale de la plate-forme de simulation initiale (Figure8.10).

Dans cette configuration, nous modélisons le cache d’instructions et de données comme des répertoires purs, tels qu’un accès simple au tableau indique si l’instruction est en réalité dans le cache. Comme pour la première configuration, dans la mise en œuvre actuelle, les caches sont placés après laMMUet sont direct mapped.

Un défaut de cache émet un SystemC wait d’un temps précalculé nécessaire au charge-ment d’une ligne de cache, sans transmettre la demande à l’interconnexion. Le temps correspondant aux cycles de simulation est consommé au début de la prochaine synchro-nisation avec SystemC. Pour cette configuration, les processeurs sont synchronisés avec

SystemC quand un défaut de cache se produit, un I/O est exécuté ou la fonction de l’ISS retourne.

La vitesse de simulation pour cette configuration est réduite beaucoup par rapport à la configuration précédente en raison du grand nombre de synchronisations avec SystemC produite par le cache. Comme le temps précalculé est consommé directement dans le mod-èle de cache, un seul événement temporel SystemC est généré pour chaque défaut de cache. Ce n’est pas beaucoup, étant donné que le transfert d’un seul octet sur l’interconnexion né-cessite plus de 10 événements SystemC temporel et non temporel. La précision augmente en utilisant une valeur moyenne précalculée pour le temps requis pour un transfert de mé-moire sur l’interconnexion. Cependant, le contention de l’interconnexion, difficile à prévoir car très non linéaire lorsqu’elle est chargée, n’est pas prise en compte.

La configuration "cache late" est similaire à la configuration "cache wait". Au lieu de consommer le temps précalculé lorsque un défaut du cache se produit, la configuration "cache late" reporte cette consommation de temps jusqu’à la première synchronisation pro-duite par une opération d’I/O ou par un retour normal de la fonction de l’ISS. Au moment de synchronisation, la somme des temps précalculés requis par tous les accès d’écriture et des défauts de cache qui ont eu lieu depuis la synchronisation précédente est consom-mée. De cette façon, le nombre de synchronisations SystemC est réduit, augmentant ainsi la vitesse de simulation.

Les chances d’éviter la modification par d’autres processeurs d’une variable attendue par le processeur courant simulé (expliqué avant dans la Figure 8.6.b) sont plus élevées dans cette configuration par rapport à la précédente en raison de la réduction du nombre de synchronisations. Cela a un impact sur la précision de la simulation.

CPU Instruction

cycles accessRAM Peripheralsaccess

Instruction cache Interconnect Data cache Other peripherals Time consumed locally with SystemC wait function Request sent over the

interconnect

Figure 8.10: Les niveaux de précision "cache wait" et "cache late"

Documents relatifs