Les dépendances de données et les conflits de ressources influent aussi de manière importante sur les performances. Sur les microprocesseurs superscalaires, en particulier ceux exécutant les instructions dans le désordre, la gestion de ces interblocages est très délicate. Nous présentons chaque type d'interblocage avant d'étudier les solutions apportées sur chacune des architectures.
L'exemple de la figure illustre ces trois types de dépendance sur les registres.
L'instruction (2) présente une dépendance de type RAW sur l'instruction (1). L'instruction (3), elle, présente une dépendance de type WAR par rapport à l'instruction (2) et est aussi victime d'une dépendance de type WAW par rapport à l'instruction (1).
La figure présente un exemple de renommage de registres. Le code de gauche est apparemment totalement séquentiel. Après renommage des registres (code de droite), nous voyons deux blocs d'instructions indépendants (1,2 et 3,4). Ces deux blocs pourront être exécutés en parallèle. Les dépendances de type WAW et WAR ont disparues.
Les mécanismes de renommage de registres du MIPS R10000 et du PentiumPro sont présentés aux paragraphes et .
Pour réduire le nombre de dépendances sur les registres, les instructions sont renommées avant d'être envoyées vers les trois files d'attente. Pour implémenter le renommage de registres (64 registres entiers physiques et 64 registres physiques flottants), le MIPS R10000 utilise une table de correspondance (Mapping Table), une liste active (Active List) et une liste libre (Free List).
La Mapping Table représente la liste des registres physiques associés aux registres logiques. L'Active List contient toutes les instructions numérotées. Elle peut gérer dans le pipeline jusqu'à 32 instructions. Les instructions des files d'attente peuvent être exécutées dans le désordre. Cependant les instructions sont validées dans l'ordre dans l'Active List. La Free List est la liste des registres physiques libres, c'est-à-dire disponibles pour le renommage.
L'UltraSPARC gère les interblocages au cours de l'étage de groupement. Toutes les dépendances sur les registres (Read After Write) et les conflits de ressources (manque d'unités fonctionnelles) sont résolus durant cet étage. Il est à noter que les dépendances Write After Write et Write After Read sur les registres ne peuvent pas exister sur ce microprocesseur exécutant les instructions dans l'ordre et écrivant les résultats à un étage fixe.
Pour réduire l'impact des défauts du cache de données sur les performances, l'UltraSPARC utilise un cache non bloquant, dont nous détaillerons le fonctionnement au paragraphe . L'UltraSPARC implémente aussi un tampon de lectures et un tampon d'écritures.
Il est à noter que sur les écritures en mémoire, l'UltraSPARC n'a pas à attendre que la donnée à écrire soit connue pour lancer le store. Le store peut même être lancé dans le même groupe que l'instruction qui calcule le résultat à sauvegarder.
Les dépendances de données de type Write After Read et Write after Write sont résolues par le renommage de registres. Le renommage de registres du PentiumPro s'effectue de la façon suivante : les micro-opérations sortant des trois décodeurs d'instructions entrent dans la Register Alias Table (RAT). Jusqu'à trois instructions au maximum peuvent être traitées par la RAT. Le Reorder Buffer du PentiumPro contient 40 registres qui peuvent être soit des registres entiers soit des registres flottants. La RAT mappe les registres logiques obtenus lors de la traduction des instructions en micro-opérations, sur les 40 registres physiques. Elle détermine si les opérandes source des micro-opérations doivent être pris dans le fichier de registres ou dans le Reorder Buffer.
Au coeur du PentiumPro, les instructions sont exécutées dans le désordre. La gestion des interblocages se fait au niveau de la station de réservation, avant que les micro-opérations ne soient lancées dans les unités fonctionnelles. La station de réservation vérifie les opérandes de chaque micro-opération, et lance les micro-opérations et leurs données quand les opérandes sont valides. C'est au niveau des stations de réservation que les vraies dépendances de données ainsi que les conflits de ressources sont traités.
Le Reorder Buffer permet de maintenir l'ordre du programme, en conservant temporairement les micro-opérations exécutées spéculativement et en les validant dans l'ordre d'exécution du programme.