• Aucun résultat trouvé

4.2 Spéculation mémoire

4.2.4 Fonctionnement de la PLSQ

Le flot d’optimisation modifié de Hybrid-DBT permet de créer des groupes de spéculation, puis d’ac- tiver ou de désactiver la spéculation en fonction du taux d’alias mesuré. Dans ce nouveau flot, le com- posant matériel appelé Partitioned Load/Store Queue (PLSQ) est chargé de comparer les adresses des différents accès mémoires des groupes de spéculation dans le but de mesurer le taux d’alias et de déclencher des rollback lorsque cela est nécessaire.

L’organisation interne de la PLSQ est similaire à celle d’une load queue (cf. 4.2.1). Une des prin- cipales différences provient du fait que la PLSQ est partitionnée, c’est-à-dire qu’elle est organisée en plusieurs bancs, chaque banc correspondant à une load queue de petite taille. La PLSQ que nous avons développée est controlée de manière logicielle, en utilisant quatre instructions spécifiques ajoutées au jeu d’instructions de notre processeur VLIW :

— L’instruction specInit permet d’initialiser la PLSQ avec les informations d’un groupe de spécu- lation donné (masque de rollback et informations de profilage). Elle est composée d’un champ specID permettant d’identifier le banc de la PLSQ à utiliser et d’un champ specInfo qui corres- pond à l’adresse du groupe de spéculation dans la mémoire Spec Info. Cette instruction doit être terminée avant d’exécuter une instruction d’un groupe de spéculation.

4.2. Spéculation mémoire

tous les champs "ages" à zéro pour ne pas détecter de faux alias avec les instructions qui seront exécutées ensuite. Cette instruction est uniquement composée d’un champ specId permettant d’identifier le banc de la PLSQ qui doit être remis à zéro. De plus, cette instruction déclenche l’incrément des compteurs de profilage de la PLSQ : le compteur d’utilisation d’un groupe de spéculation est incrémenté à chaque fois que l’instruction de remise à zéro est rencontrée, le compteur d’alias est, quant à lui, incrémenté si un alias a été détecté depuis la dernière remise à zéro.

— Les instructions load et store ont été modifiées : un bit a été ajouté pour déterminer si l’accès mémoire est spéculatif ou non. Si il est spéculatif, un champ specId permet d’identifier le banc de la PLSQ à utiliser et un bit add permet de décider si l’adresse doit être ajoutée dans la PLSQ ou comparée aux adresses déjà stockées. Ce bit add permet d’utiliser la PLSQ pour vérifier la spéculation (les load sont alors ajoutés dans la PLSQ) ou simplement pour profiler le groupe de spéculation (les store sont alors ajoutés dans la PLSQ).

Spec info #use #fail mask

Bank 1

init specId specInfo [256] mask

Bank 2

mask

Bank 3

mask #failures #uses #failures #uses #failures #uses @ d a ta w ri te clear

FIGURE4.13 – Schéma de fonctionnement de la PLSQ, constituée de trois bancs. Outre ces bancs, le schéma représente également la mémoire Spec Info qui permet de stocker les masques de spéculation et les informations de profilage ; un registre pour chaque banc contient le masque à appliquer si un alias est detecté.

La figure 4.13 est une représentation simplifiée d’une PLSQ partitionnée en trois bancs. Les prin- cipaux signaux permettant de contrôler la PLSQ y sont représentés : specId et specInfo. A ces deux signaux s’ajoutent les bits init et clear placés à 1 lorsque l’instruction exécutée correspond à un specInit ou un specClear respectivement. La figure 4.13 représente également la mémoire specInfo et les différents bancs et registres utilisés pour stocker les masques.

Lorsqu’une instruction specInit est exécutée, l’adresse encodée dans specInfo est utilisée pour accéder au masque de rollback et aux informations de profilage. Ces informations seront ensuite sto- ckées dans le banc correspondant, identifié par le signal specId. Les autres instructions sont traitées au niveau des bancs de la PLSQ.

La figure 4.14 représente l’organisation d’un banc de la PLSQ. Ce banc contient deux compteurs permettant de profiler les groupes de spéculation et six registres, organisés en registres à décalage, pour stocker des adresses et les bits d’âge ainsi que les différents comparateurs d’adresse. Les signaux d’entrée sont ceux des instructions présentées précédemment : add, specId, address et clear.

Addresses & ages == == == == == == rollback incr incr == specId address clear #failures #uses add

FIGURE4.14 – Schéma de fonctionnement d’un banc de la PLSQ, capable de stocker 6 accès mémoires. Le schéma représente notamment les registres permettant de compter le nombre d’utilisations et le nombre d’alias, les registres pour sauvegarder les adresses accédées et les différents comparateurs.

Lorsqu’une instruction d’accès à la mémoire est exécutée et que son bit de spéculation est à 1, elle est traitée par un banc de la PLSQ. En fonction de la valeur du bit add, deux traitements sont possibles : — si le bit add est à 1, l’adresse de l’instruction est ajoutée en entrée des registres à décalage, avec

le bit d’âge mis à 1 ;

— si le bit add est à 0, l’adresse de l’accès mémoire est comparée aux adresses stockées dans les registres à décalage, dont le bit d’âge est à 1. Si une de ces adresses est identique à celle de l’accès courant, le signal de rollback est déclenché.

Toutefois, l’interprétation du signal rollback est effectuée par le processeur de VLIW, qui ne doit pas revenir en arrière si c’est un store qui le déclenche (car dans ce cas le groupe de spéculation est en mode profilage et non en mode spéculation).

Lorsqu’une instruction specClear est exécutée, tous les âges du banc concerné sont remis à zero et les compteurs sont incrémentés. La nouvelle valeur des deux compteurs est également inscrite dans la mémoire specInfo.