• Aucun résultat trouvé

Description du flot de spéculation dynamique

4.2 Spéculation mémoire

4.2.3 Description du flot de spéculation dynamique

Afin d’exploiter la spéculation de dépendances mémoire, nous avons modifié le flot d’optimisation dynamique de Hybrid-DBT. Ce nouveau flot est représenté sur la Figure 4.12. Les niveaux d’optimisation 0 et 1, qui correspondent aux optimisations à l’échelle des instructions ou des blocs de base, n’ont pas été modifiés. Le second niveau d’optimisation, qui consiste à analyser et optimiser à l’echelle du sous- programme, a été séparé en trois étapes : la construction des groupes de spéculation (voir ci-après), l’activation et la désactivation d’une spéculation.

Un groupe de spéculation est une paire d’ensembles (S, L) d’instructions mémoire telle que : — les instructions de S sont des écritures en mémoire ;

— les instructions de L sont des lectures en mémoire ;

— pour chaque lecture l ∈ L, il existe au moins une écriture s ∈ S située avant la lecture l dans le binaire RISC-V original ;

— pour chaque écriture s ∈ S, il existe au moins une lecture l ∈ L située après l’écriture s dans le binaire RISC-V original ;

— une instruction d’écriture s ne peut appartenir qu’à un seul groupe de spéculation.

Plus concrètement, un groupe de spéculation doit permettre de retirer des dépendances mémoire. De fait, il n’est pas utile d’avoir dans un groupe une écriture mémoire sans aucune lecture qui en dépend, ni l’inverse.

Dans le second niveau d’optimisation, l’outil d’optimisation dynamique construit le graphe de flot de contrôle des procédures, déroule certaines boucles et construit des superblocs (voir la partie "Niveau d’optimisation 2" de la figure 4.12). Une fois ces transformations appliquées, l’outil d’optimisation analyse les blocs les plus critiques (les traces et les corps de boucle) pour construire des groupes de spéculation de manière gloutonne. Si le bloc analysé contient plus d’instructions qu’il n’y a d’emplacements dans le groupe de spéculation, un deuxième groupe est créé. Ce sont les caractéristiques de la PLSQ qui dictent la taille maximale d’un groupe de spéculation et le nombre de groupes de spéculation qu’il est possible de créer dans un même bloc. Ensuite, l’outil assigne à chaque groupe une adresse dans la mémoire Spec Info qui permettra de stocker les masques de rollback et les données de profilage.

Lorsque l’outil d’optimisation dynamique a analysé tous les blocs de la procédure, il va procéder à la génération des binaires VLIW, en utilisant le IR Scheduler. Il est important de souligner que, à cet endroit du flot, les groupes de spéculation sont construits mais les dépendances entre les opérations d’un groupe donné n’ont pas été supprimées. Les binaires VLIW générés ici n’utilisent donc pas la spéculation. Dans cette première étape, ils sont dans un mode dit de "profilage" : la PLSQ est utilisée

4.2. Spéculation mémoire

Instruction Translation Binaires

source Binaires VLIW

Niveau

d’optimisation 0 Pas d’ILP

Niveau d’optimisation 1 Niveau d’optimisation 2 Construction du CFG et optimisations Accélérateurs matériels Transformation logicielles Données en mémoire IR Builder IR Scheduler IR Mode normal PLSQ désactivée IR Scheduler #utilisation #alias Commit du bloc τalias > 15%

Architecture utilisée

PLSQ Identification des groupes de spéculation groupes Binaires VLIW Retrait des dépendances & Changement des bits

add Niveau d’optimisation 2 Ajout spéculation IR Scheduler Binaires VLIW Ajout des dépendances & Changement des bits add Niveau

d’optimisation 2 Retrait spéculation

Masques de rollback Spec

Spec Spec IR ou binaire qui spécule τalias < 10% IR Scheduler Binaires VLIW PLSQ Mode profilage et spéculation Commit du bloc τalias < 10%

FIGURE 4.12 – Présentation du flot de traduction et d’optimisation exploitant la spéculation mémoire. Les niveaux d’optimisation 0 et 1 restent inchangés, et la PLSQ n’est pas utilisée à ce stade. Le niveau d’optimisation 2 commence par identifier les groupes de spéculations et génère des binaires en mode profilage. Si le taux d’aliasing d’un groupe passe sous les 10%, le système déclenche la spéculation : les dépendances mémoire sont retirées et les bits add des loads sont mis à 1. Le IR Scheduler est utilisé pour générer les binaires VLIW (avec spéculation) et les masques de rollback. Si le taux d’aliasing passe au dessus de 15%, le système coupe la spéculation : les dépendances mémoires sont ajoutées de nouveau, et les bits add des stores sont mis à 1. Puis le IR Scheduler est utilisé pour générer des binaires VLIW (sans spéculation).

informations de profilage sont sauvegardées dans la mémoire Spec Info, à l’emplacement assigné au groupe de spéculation.

En parallèle de l’exécution des binaires VLIW, l’outil de DBT parcourt régulièrement la liste des diffé- rents groupes de spéculation et leurs données de profilage. Si il détecte un groupe enmode profilage

ayant un taux d’alias inférieur à 10%, il active la spéculation pour le groupe (voir la partie "Niveau d’opti- misation 2 - Ajout spéculation" de la figure 4.12). Pour ce faire, il supprime les dépendances de contrôle entre les instructions du groupe de spéculation. Si deux instrutions du groupe possèdent également une dépendance de donnée, celle-ci n’est pas modifiée pour assurer un fonctionnement correct. Une nouvelle version des binaires est alors générée à partir de cette IR modifiée. Puisque qu’il y a des ins- tructions spéculatives dans le bloc, le IR Scheduler génère également un masque de rollback pour chaque groupe de spéculation utilisé. Ce masque est stocké dans la mémoire Spec Info, et sera utilisé si un alias est détecté pendant l’exécution. Le groupe de spéculation passe alors enmode spéculation.

Quand l’outil de DBT détecte un groupe de spéculation enmode spéculation dont le taux d’alias

est supérieur à 15%, il désactive la spéculation pour le groupe (voir la partie "Niveau d’optimisation 2 - Retrait spéculation" de la figure 4.12). Pour ce faire, il ajoute des dépendances de contrôle entre les différentes opérations du groupe de spéculation (seulement entre les écritures et les lectures situées en- suite). Une nouvelle version du binaire et alors générée par le IR Scheduler. Le groupe de spéculation passe enmode profilage.

Les valeurs de transition entre la phase de profilage et la phase de spéculation (10% et 15%) ont été choisies à partir des quelques exemples étudiés. Idéalement, il est possible de calculer le gain lié à la spéculation (différence entre la taille de l’ordonnancement avec et sans la spéculation) ainsi que le coût d’un rollback. L’outil peut ainsi trouver un palier à partir duquel la spéculation est rentable.

Les sous-sections suivantes sont consacrées à la description des modifications matérielles appor- tées au système.