Qu'est-ce que Exécution dans le désordre (out-of-order) ?

Méthode qui analyse les dépendances entre instructions et exécute celles qui sont prêtes dans un ordre différent de celui du programme pour gagner en performance. Les résultats sont validés dans l'ordre d'origine grâce au tampon de réordonnancement.

Nom japonais: アウトオブオーダー実行

« Exécution dans le désordre (out-of-order) » apparaît dans 10 questions d'entraînement réparties sur 5 thèmes, dont CPU et architecture, ISA et assembleur, Hiérarchie mémoire.

Domaine: CPU et architecture

Fonctionnement de l'exécution dans le désordre

La partie frontale (front end) lit et décode toujours les instructions dans l'ordre du programme. Chaque instruction est ensuite renommée, reçoit une entrée dans le tampon de réordonnancement (ROB) et est placée dans une file d'émission. La logique d'ordonnancement repère les instructions dont les opérandes sources sont prêts et les envoie vers les unités d'exécution libres, quelle que soit leur position dans le programme. Une instruction qui attend un chargement lent est mise de côté pendant que des instructions ultérieures indépendantes s'exécutent. Les résultats sont conservés jusqu'à ce que le ROB retire les instructions dans leur ordre d'origine, si bien que le logiciel observe exactement le comportement d'une machine séquentielle. La fenêtre couvre des centaines d'instructions dans les cœurs haute performance.

Renommage de registres et validation dans l'ordre

Les programmes réutilisent un petit ensemble de registres architecturaux, ce qui crée de fausses dépendances : une écriture ultérieure ne doit pas dépasser une lecture ou une écriture antérieure du même registre. Le renommage de registres associe chaque nouvelle valeur à un registre physique neuf, ne laissant que les vraies dépendances de données, où une instruction a réellement besoin d'une valeur calculée par une autre. La validation dans l'ordre (in-order commit) via le ROB fournit des exceptions précises et permet au cœur d'exécuter au-delà des branchements prédits, en abandonnant le travail du mauvais chemin en cas de mauvaise prédiction. Les détails de l'ISA comptent ici : RV64I étend le signe des résultats de lw à tout le registre précisément pour que les bits de poids fort ne dépendent jamais de la valeur précédente du registre.

Masquer la latence mémoire

Le principal bénéfice apparaît lors des échecs de cache. Un cœur dans l'ordre se bloque derrière un chargement en échec ; un cœur dans le désordre continue de trouver du travail indépendant et peut émettre d'autres chargements dont les échecs se recouvrent avec le premier. Cela exige un cache non bloquant, qui suit les échecs en cours dans des registres d'état des échecs (MSHR) et continue de servir les succès entre-temps. Le nombre d'échecs et la latence de chacun restent inchangés, mais leur recouvrement masque une grande partie du coût. Avec l'émission superscalaire, la prédiction de branchement et de grands caches, cela augmente l'IPC (instructions par cycle), et les performances évoluent comme l'IPC multiplié par la fréquence.

Dans le désordre ou superscalaire, et le coût

Le terme superscalaire décrit la largeur, c'est-à-dire l'émission de plusieurs instructions par cycle ; l'exécution dans le désordre décrit l'ordre dans lequel elles s'exécutent. Un cœur peut être superscalaire dans l'ordre, et les cœurs haute performance récents combinent les deux avec une largeur d'environ 6 à 10 instructions. Le coût est élevé : la vérification des dépendances croît à peu près comme le carré de la largeur, et les tables de renommage, la logique de réveil (wakeup) et le ROB ajoutent surface et énergie à chaque instruction. C'est pourquoi les cœurs d'efficacité des SoC de téléphones sont plus petits et plus simples, et pourquoi les GPU consacrent plutôt ce silicium à de nombreuses unités arithmétiques simples pour le débit.

S'entraîner : questions sur Exécution dans le désordre (out-of-order)

Dans un processeur à exécution dans le désordre, quel mécanisme valide (retire) dans l'ordre original du programme les résultats des instructions exécutées dans le désordre ?

  1. ATampon de réordonnancement (reorder buffer)
  2. BFiltre de snoop
  3. CTLB
Afficher la réponse et l'explication

Réponse : A. Tampon de réordonnancement (reorder buffer)

Le tampon de réordonnancement conserve temporairement les résultats des instructions exécutées dans le désordre et les valide (retire) dans l'ordre du programme ; dans les cœurs hautes performances récents, il contient plusieurs centaines d'instructions. En cas d'erreur de prédiction de branchement ou d'exception, les résultats des instructions suivantes sont abandonnés et l'état correct est restauré, si bien que, vu de l'extérieur, l'exécution semble conforme au programme (exceptions précises).

Quel est le principal objectif du renommage de registres dans un processeur à exécution dans le désordre ?

  1. ARéduire le nombre de registres pour diminuer le circuit
  2. BRéaffecter des registres physiques sans changer les noms de registres du programme, afin de supprimer les fausses dépendances (WAR et WAW)
  3. CChiffrer les valeurs des registres
Afficher la réponse et l'explication

Réponse : B. Réaffecter des registres physiques sans changer les noms de registres du programme, afin de supprimer les fausses dépendances (WAR et WAW)

Le nombre de registres d'un jeu d'instructions étant limité, environ 16 à 32, les mêmes noms sont réutilisés, ce qui crée des dépendances sans rapport avec le flux réel des données (antidépendance WAR, dépendance de sortie WAW). Le renommage de registres affecte dynamiquement plusieurs centaines de registres physiques et utilise un nouveau registre physique à chaque écriture, supprimant ces dépendances et augmentant le nombre d'instructions exécutables en parallèle. Les vraies dépendances (RAW) ne peuvent être supprimées.

Questions fréquentes

Différence entre exécution dans le désordre et superscalaire

Superscalaire signifie émettre plusieurs instructions par cycle d'horloge ; dans le désordre signifie les exécuter dans un ordre différent de celui du programme quand les dépendances le permettent. Ce sont deux idées indépendantes que les cœurs haute performance combinent généralement.

Pourquoi les processeurs à exécution dans le désordre ont-ils besoin d'un tampon de réordonnancement ?

Les instructions se terminent dans le désordre, mais l'état architectural doit être mis à jour dans l'ordre du programme pour que les exceptions soient précises et que le travail mal prédit puisse être abandonné. Le tampon de réordonnancement conserve les résultats jusqu'à ce que chaque instruction puisse être retirée dans l'ordre.

L'exécution dans le désordre réduit-elle les échecs de cache ?

Non. Elle masque la latence des échecs en effectuant du travail indépendant, y compris l'émission d'autres échecs en parallèle, pendant que l'échec est traité ; le nombre d'échecs reste le même.

« Exécution dans le désordre (out-of-order) » dans les explications

Questions mentionnant « Exécution dans le désordre (out-of-order) » (10)

  1. Dans un processeur à exécution dans le désordre, quel mécanisme valide (retire) dans l'ordre original du programme les résultats des instructions exécutées dans le désordre ?
  2. Quel est le principal objectif du renommage de registres dans un processeur à exécution dans le désordre ?
  3. Comment appelle-t-on l'architecture de processeur qui émet et exécute simultanément plusieurs instructions par cycle d'horloge ?
  4. Quel mode d'exécution examine les dépendances entre instructions et exécute les instructions prêtes dans un ordre différent de celui du programme pour améliorer les performances ?
  5. Quel indicateur exprime le nombre d'instructions exécutées par cycle d'horloge ?
  6. Quelle description de la manière dont les CPU x86 hautes performances actuels exécutent en interne les instructions complexes est correcte ?
  7. Lors de l'exécution d'une instruction lw en RV64I (64 bits), comment la valeur de 32 bits lue est-elle placée dans le registre de 64 bits ?
  8. Quel est le principal avantage d’un cache non bloquant (cache qui accepte d’autres accès pendant le traitement d’un défaut) ?
  9. Quelle est la différence de philosophie de conception entre CPU et GPU ?
  10. Dans un SoC de smartphone associant cœurs performants et cœurs économes, pourquoi l'exécution de tâches légères sur les cœurs économes consomme-t-elle moins d'énergie ?

Termes associés

Prédiction de branchement Superscalaire IPC CPI Décodeur Cache non bloquant GPU Débit (throughput) SoC (système sur puce) Architecture de von Neumann

Retour au glossaire