Exécution dans l’ordre vs dans le désordre : aléas, coût, IPC

Un CPU à exécution dans l’ordre émet et exécute les instructions dans l’ordre du programme. Si une instruction antérieure attend, par exemple à cause d’un défaut de cache, les instructions suivantes s’arrêtent aussi. Un CPU à exécution dans le désordre (out-of-order) analyse les dépendances, exécute d’abord les instructions prêtes et valide les résultats dans l’ordre du programme grâce au tampon de réordonnancement (ROB). Comme d’autres instructions avancent pendant les attentes, l’IPC est plus élevé, mais il faut un renommage de registres et des circuits de sélection des instructions, ce qui augmente la taille des circuits et la consommation.

CritèreExécution dans l’ordreExécution dans le désordre
Ordre d’émission et d’exécutionOrdre du programmeLes instructions prêtes sont exécutées en premier, dans un ordre modifié
Validation des résultats (retrait)Ordre du programmeDans l’ordre du programme, via le tampon de réordonnancement (ROB)
Quand une instruction antérieure attendLes instructions suivantes s’arrêtent aussi (blocage)Les instructions suivantes indépendantes avancent
Traitement des aléas de donnéesTransfert anticipé (forwarding) et blocages. L’ordre des instructions est confié au compilateurEn plus du transfert anticipé, le matériel ordonnance dynamiquement les instructions
Fausses dépendances (WAR, WAW)L’ordre étant respecté, elles posent rarement problèmeSupprimées par le renommage de registres, qui réattribue des registres physiques
Principaux circuits supplémentairesPeu. Pipeline simpleTable de renommage, registres physiques, file d’émission, ROB, files de chargement et de rangement
Effet des défauts de cacheImportant. Chaque défaut a tendance à bloquer le pipelineD’autres instructions avancent dans une fenêtre de plusieurs centaines d’instructions, ce qui masque une partie de l’attente
IPCPlus faible. À largeur d’émission égale, inférieur à l’exécution dans le désordreÉlevé. Combiné à une large émission, nettement supérieur à 1
Taille des circuits et consommationFaibles. Il est facile d’obtenir de bonnes performances par unité de surface ou de puissanceImportantes. Les circuits de sélection et le ROB augmentent la surface et la consommation
Domaines d’utilisationMicrocontrôleurs, petits cœurs embarqués, certains cœurs privilégiant l’efficacité énergétique, cœurs de calcul des GPUCœurs hautes performances des PC, serveurs et smartphones

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

Exécution dans l’ordre
Lorsqu’il faut limiter la surface et la consommation, ou rendre le temps d’exécution facile à prévoir : microcontrôleurs, cœurs embarqués et conceptions qui juxtaposent de nombreux petits cœurs.
Exécution dans le désordre
Lorsqu’un seul thread doit s’exécuter le plus vite possible : cœurs hautes performances des PC, serveurs et smartphones.
Ensemble
Certaines puces associent des cœurs hautes performances dans le désordre et des cœurs économes, dans l’ordre ou dans le désordre à échelle réduite. Les traitements lourds vont aux cœurs performants et les traitements légers aux cœurs économes, pour concilier performances et consommation.

Questions fréquentes

L’exécution dans le désordre peut-elle modifier les résultats d’un programme ?

Pas au sein d’un même thread. Même si l’ordre d’exécution change, les vraies dépendances de données (RAW) sont respectées et les résultats sont validés dans l’ordre du programme via le tampon de réordonnancement. 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 rétabli, si bien que, vu de l’extérieur, tout semble exécuté dans l’ordre du programme.

Un CPU à exécution dans l’ordre peut-il exécuter plusieurs instructions par cycle ?

Oui. Il existe des processeurs superscalaires dans l’ordre qui, tout en respectant l’ordre, émettent simultanément des instructions voisines indépendantes. Mais si une instruction antérieure se bloque, les suivantes ne peuvent pas avancer, si bien que l’IPC n’augmente pas autant qu’avec l’exécution dans le désordre.

Que font respectivement le renommage de registres et le ROB ?

Le renommage de registres supprime les fausses dépendances (WAR et WAW) dues à la réutilisation d’un même nom de registre en réattribuant des registres physiques, ce qui augmente le nombre d’instructions exécutables en parallèle. Le ROB conserve les résultats des instructions exécutées dans un ordre modifié et les valide dans l’ordre du programme, ce qui permet des exceptions précises.

Comment améliorer les performances d’un CPU à exécution dans l’ordre ?

Le compilateur ordonne les instructions de façon à limiter les attentes, par exemple en éloignant l’instruction qui utilise le résultat d’un chargement de ce chargement. Outre la réduction des blocages par transfert anticipé, un agencement des données qui réduit les défauts de cache et le préchargement sont aussi efficaces.

Vérifier vos connaissances

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 ?

  1. AExécution dans l'ordre
  2. BExécution dans le désordre (out-of-order)
  3. CExécution monocycle
Afficher la réponse et l'explication

Réponse : B. Exécution dans le désordre (out-of-order)

L'exécution dans le désordre diffère les instructions qui attendent le résultat d'une instruction précédente ou des données de la mémoire, et exécute d'abord les instructions suivantes déjà prêtes. Son principal avantage est de poursuivre d'autres travaux pendant l'attente d'un défaut de cache. Elle exige des circuits qui recherchent les instructions exécutables dans une fenêtre de plusieurs centaines d'instructions, le renommage de registres et un tampon de réordonnancement qui valide les résultats dans l'ordre ; circuits et consommation s'en trouvent accrus.

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.

  1. Comment appelle-t-on l'architecture de processeur qui émet et exécute simultanément plusieurs instructions par cycle d'horloge ?
  2. Dans un pipeline, lorsqu'une instruction utilise immédiatement le résultat de la précédente (aléa de données), quelle technique transmet directement le résultat du calcul à l'instruction suivante sans attendre l'écriture dans le registre ?
  3. Quel indicateur exprime le nombre d'instructions exécutées par cycle d'horloge ?

Questions d'entraînement sur CPU et architecture

Termes clés expliqués

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.
Superscalaire
Architecture de processeur qui émet et exécute plusieurs instructions simultanément par cycle d'horloge. Plusieurs unités de calcul traitent en parallèle des instructions indépendantes.
IPC
Abréviation de Instructions Per Cycle : nombre d'instructions exécutées par cycle d'horloge. Il exprime l'efficacité de conception du CPU ; la performance est environ le produit de l'IPC par la fréquence d'horloge. Son inverse est le CPI.
Pipeline
Méthode qui découpe le traitement des instructions en étapes (lecture, décodage, exécution, etc.) et traite plusieurs instructions simultanément en les décalant.
Prédiction de branchement
Technique qui prédit le résultat d'un branchement conditionnel avant son exécution afin de traiter les instructions suivantes sans arrêter le pipeline. En cas d'erreur, le traitement est repris.

Comparatifs associés