• Aucun résultat trouvé

Méthode d’analyse statique pour les caches d’instructions

1.4 Analyse bas niveau : analyse du comportement temporel pire cas

1.4.4 Méthode d’analyse statique pour les caches d’instructions

traite

Cette méthode d’analyse statique, proposée dans [34,101], consiste à classifier chaque référence mémoire par son comportement pire cas dans le cache lors de l’exécution. Pour ce faire, une classification que nous appellerons classification de comportement est définie de la façon suivante :

Analyse bas niveau : analyse du comportement temporel pire cas des caches 25 – Always-Hit (AH) : la référence produira toujours un succès de cache lors de

l’exécution ;

– Always-Miss (AM) : la référence produira toujours un défaut de cache lors de l’exécution ;

– First-Miss (FM) : la référence pourra produire un succès ou un défaut de cache lors du premier accès tandis que les accès suivants produiront toujours un succès de cache lors de l’exécution ;

– Not-Classified (NC) : tous les autres cas.

Afin de déterminer la classification de comportement de chaque accès à une référence mémoire, l’analyse de cache définit trois analyses point-fixe, manipu- lant des états abstraits de cache, appliquées sur le graphe de flot de contrôle de l’application.

– L’analyse Must détermine si une référence mémoire est toujours contenue dans le cache à un point de programme donné ;

– L’analyse Persistence détermine si une référence mémoire ne sera pas évin- cée après avoir été préalablement chargée dans le cache à un point de pro- gramme donné ;

– L’analyse May détermine si une référence mémoire peut être contenue dans le cache à un point de programme donné.

Chacune de ces trois analyses calcule des états abstraits de cache pour chacun des blocs de base. Pour ce faire, deux fonctions dans le domaine abstrait nommées Update et Join sont définies pour chacune des analyses :

– La fonction Update est appelée lors de chaque accès à une référence mémoire et considère l’état abstrait de cache avant l’accès (ACSin) et calcule l’état

abstrait de cache résultant de l’accès à cette référence mémoire (ACSout) en

respectant la politique de remplacement de cache ainsi que la sémantique de l’analyse ;

– La fonction Join est utilisée pour fusionner deux états abstraits de cache lorsqu’un bloc de base dispose de deux prédécesseurs dans le graphe de flot de contrôle comme par exemple au point de re-convergence d’une condi- tionnelle.

La figure 1.7 présente un exemple d’utilisation de la fonction Join (1.7.a) et Update(1.7.b) pour l’analyse Must d’un cache associatif par ensembles disposant d’un degré d’associativité de deux et utilisant la politique de remplacement LRU. Comme cette politique est indépendante pour chacun des ensembles du cache, seulement l’ensemble concerné est illustré. Une notion d’âge est associée à chacun des blocs de cache de cet ensemble. Plus l’âge d’un bloc est petit, plus la ligne de cache contenue dans ce bloc a été accédée récemment. Pour l’analyse Must, une référence mémoire r est stockée une seule fois dans l’état abstrait de cache avec son âge maximal. Ceci signifie que lors de l’exécution la référence mémoire r aura un âge toujours inférieur ou égal à l’âge déterminé lors de l’analyse Must. Les

26 État de l’art fonctions Join et Update sont définies de la façon suivante pour l’analyse Must : – La fonction Join est appliquée sur deux états abstraits de cache et retourne un état abstrait de cache contenant uniquement les références mémoire pré- sentes dans les deux états abstraits de cache d’entrée, en conservant leur âge maximal ;

– La fonction Update effectue l’accès à une référence mémoire r sur un état abstrait de cache et retourne l’état de cache résultant de cet accès. Cette fonction projette la référence r dans l’ensemble du cache correspondant et lui associe l’âge le plus petit et augmente l’âge des références mémoire pré- sentes dans l’état abstrait de cache d’entrée. Lorsque l’âge d’une référence mémoire devient supérieur au degré d’associativité du cache, la référence mémoire est évincée de l’état abstrait de cache.

in

+ age

{a} {b} abstrait de cache

ensemble d’un état à 2 voies politique de remplacement LRU politique de remplacement LRU abstrait de cache ensemble d’un état

à 2 voies {a} ACS {} + age {b} {c} [r] {r} {r} {r} {r}

a. Fonction Join de l’analyse Must. b. Fonction Update de l’analyse Must.

intersection + age maximal

out

ACS

Fig. 1.7: Exemple d’utilisation des fonctions Join et U pdate pour l’analyse Must avec la po-

litique de remplacement de cache LRU. La fonction Join conserve l’âge maximal des références mémoire présentes dans les deux états abstraits de cache tandis que la fonction U pdate effectue la mise à jour du contenu du cache lors d’un accès à la référence mémoire r.

Pour les analyses May et Persistence, l’approche est similaire et la fonction Join est définie de la façon suivante :

– Analyse May : la fonction Join réalise l’union des références mémoire pré- sentes dans les états abstraits de cache et conserve l’âge minimal ;

– Analyse Persistence : la fonction Join réalise l’union des références mémoire présentes dans les états abstraits de cache et conserve l’âge maximal. Pour ce faire une voie virtuelle est ajoutée à chacun des ensembles du cache pour conserver l’ensemble des références mémoire potentiellement évincées. Finalement, la classification de comportement de l’accès à une référence mé- moire se déduit en fonction du contenu des états abstraits de cache de chacune des analyses avant l’accès à cette référence. Si la référence mémoire est contenue dans l’état abstrait de cache de l’analyse Must, la classification de cette référence est Always-Hit. Sinon, si elle est présente dans l’état abstrait de l’analyse Persistence, la classification est First-Miss. Sinon, si elle est présente dans l’état abstrait de l’analyse May, la classification est Not Classified tandis que si elle en est absente, la classification est Always-Miss.

Analyse bas niveau : analyse du comportement temporel pire cas des caches 27

1.4.5 Résultats théoriques permettant la prise en compte