Article de reference

Prédication (architecture informatique)

En architecture informatique , la prédication est une fonctionnalité qui offre une alternative au transfert de contrôle conditionnel , tel qu'implémenté par les instructions de ...

architecture informatique , la prédication est une fonctionnalité qui offre une alternative au transfert de contrôle conditionnel , tel qu'implémenté par les instructions de branchement conditionnel . La prédication fonctionne en associant des instructions conditionnelles ( prédiquées ) non liées à un branchement à un prédicat , une valeur booléenne utilisée par l'instruction pour déterminer si elle est autorisée à modifier l'état de l'architecture. Si le prédicat spécifié dans l'instruction est vrai, l'instruction modifie l'état de l'architecture ; sinon, l'état de l'architecture reste inchangé. Par exemple, une instruction de déplacement prédiquée (un déplacement conditionnel) ne modifiera la destination que si le prédicat est vrai. Ainsi, au lieu d'utiliser un branchement conditionnel pour sélectionner une instruction ou une séquence d'instructions à exécuter en fonction du prédicat qui contrôle la réalisation du branchement, les instructions à exécuter sont associées à ce prédicat, de sorte qu'elles seront exécutées, ou non, selon que le prédicat est vrai ou faux.

Les processeurs vectoriels , certaines architectures SIMD (telles que AVX2 et AVX-512 ) et les GPU en général utilisent intensivement la prédication, en appliquant un bit d'un masque conditionnel aux éléments correspondants des registres vectoriels traités. En revanche, la prédication scalaire dans les jeux d'instructions scalaires ne nécessite qu'un seul bit de prédicat. L'intérêt majeur des masques de prédicat en traitement vectoriel réside dans la possibilité, grâce à un tableau de codes de condition (un par élément vectoriel), de réinjecter des masques de prédicat qui sont ensuite appliqués aux instructions vectorielles suivantes.

des programmes informatiques contiennent du code conditionnel , qui ne s'exécute que sous certaines conditions, en fonction de facteurs imprévisibles, comme par exemple les entrées de l'utilisateur. La majorité des processeurs exécutant simplement l' instruction suivante dans une séquence, la solution traditionnelle consiste à insérer des instructions de branchement permettant au programme de bifurquer conditionnellement vers une autre section de code, modifiant ainsi l'étape suivante. Cette solution était suffisante jusqu'à ce que les concepteurs cherchent à améliorer les performances en implémentant le pipeline d'instructions , une méthode ralentie par les branchements. Pour une description plus détaillée des problèmes rencontrés et une solution courante, voir l'article « Prédicteur de branchement » .

Heureusement, l'un des modèles de code les plus courants qui repose normalement sur des branchements a une solution plus élégante. Considérez le pseudocode suivant :

des instructions machine ressemblant à :

logique des prédicats ) et que l'instruction ne sera exécutée que si le prédicat est vrai. Le code machine de l'exemple ci-dessus utilisant la prédication pourrait ressembler à ceci :

pipelinée et prévient les problèmes de cache . Elle présente également plusieurs avantages plus subtils :

  • Les fonctions traditionnellement calculées à l'aide d'opérations arithmétiques simples et d'opérations bit à bit peuvent être calculées plus rapidement à l'aide d'instructions prédicatives.
  • Les instructions prédicées avec des prédicats différents peuvent être combinées entre elles et avec du code inconditionnel, permettant une meilleure planification des instructions et donc des performances encore meilleures.
  • L'élimination des instructions de branchement inutiles peut accélérer l'exécution des branchements nécessaires, tels que ceux qui constituent les boucles, en réduisant la charge sur les mécanismes de prédiction de branchement .
  • Élimination du coût d'une mauvaise prédiction de branchement, qui peut être élevé sur les architectures profondément pipelinées.
  • Les jeux d'instructions qui possèdent des codes de condition complets générés par les instructions peuvent réduire davantage la taille du code en utilisant directement les registres de condition dans ou comme prédication.

Inconvénients

Le principal inconvénient de la prédication réside dans l'espace mémoire supplémentaire qu'elle requiert. Dans les implémentations classiques, chaque instruction réserve un champ de bits pour le prédicat, spécifiant les conditions d'exécution de cette instruction. Lorsque la mémoire disponible est limitée, comme sur les systèmes embarqués , ce coût en espace peut s'avérer prohibitif. Cependant, certaines architectures, telles que Thumb-2, parviennent à contourner ce problème (voir ci-dessous). Parmi les autres inconvénients, on peut citer :

  • La prédication complexifie le matériel en ajoutant des niveaux de logique aux chemins critiques et peut potentiellement dégrader la fréquence d'horloge.
  • Un bloc prédité inclut des cycles pour toutes les opérations, de sorte que les chemins plus courts peuvent prendre plus de temps et être pénalisés.
  • Une lecture de registre supplémentaire est nécessaire. Une addition non prédite lit deux registres dans un fichier de registres, tandis qu'une addition prédite doit également lire le fichier de registres de prédicat. Cela augmente les risques d'erreur lors d' une exécution hors séquence .
  • La prédication n'est généralement pas spéculée et entraîne une chaîne de dépendances plus longue. Pour des données ordonnées, cela se traduit par une perte de performance par rapport à une branche prévisible.

La prédication est plus efficace lorsque les chemins sont équilibrés ou lorsque le chemin le plus long est le plus fréquemment exécuté, mais déterminer un tel chemin est très difficile au moment de la compilation, même en présence d' informations de profilage .

Histoire

Les instructions prédicatives étaient courantes dans les ordinateurs européens des années 1950, notamment le Mailüfterl (1955), le Zuse Z22 (1955), le ZEBRA (1958) et l' Electrologica X1 (1958). L' IBM ACS-1 de 1967 intégrait un bit de « skip » dans ses formats d'instructions, et le processeur flexible CDC de 1976 intégrait trois bits d'exécution conditionnelle dans ses formats de micro-instructions.

L'architecture PA-RISC de Hewlett-Packard (1986) disposait d'une fonctionnalité appelée nullification , permettant de prédiquer la plupart des instructions par l'instruction précédente. L'architecture POWER d' IBM (1990) proposait des instructions de déplacement conditionnel. Son successeur, PowerPC (1993), a abandonné ces instructions. L'architecture Alpha de Digital Equipment Corporation (1992) intégrait également des instructions de déplacement conditionnel. MIPS a bénéficié de ces instructions en 1994 avec la version MIPS IV ; et SPARC a été étendu dans la version 9 (1994) avec des instructions de déplacement conditionnel pour les registres entiers et à virgule flottante. RISC-V ne disposait initialement d'aucune prédication, mais la version 2.0 de l'ISA non privilégiée l'a intégrée grâce à une extension (Zicond) contenant des instructions de mise à zéro conditionnelle permettant la synthèse d'arithmétique et de sélection conditionnelles.

Dans l' architecture Hewlett-Packard / Intel IA-64 , la plupart des instructions sont prédiquées. Les prédicats sont stockés dans 64 registres de prédicats dédiés ; l'un de ces registres est toujours à vrai, de sorte que les instructions non prédiquées sont simplement des instructions auxquelles on a attribué la valeur « vrai ». L'utilisation de la prédication est essentielle à l'implémentation du pipeline logiciel dans l'architecture IA-64, car elle évite d'avoir à écrire du code séparé pour les prologues et les épilogues.x86 , une famille d'instructions de déplacement conditionnel ( CMOVet FCMOV) a été ajoutée par le processeur Intel Pentium Pro (1995). Ces CMOVinstructions copiaient le contenu du registre source vers le registre de destination en fonction d'un prédicat fourni par la valeur du registre d'indicateur.

Dans l' architecture ARM , le jeu d'instructions 32 bits d'origine offre une fonctionnalité appelée exécution conditionnelle . Celle-ci permet à la plupart des instructions d'être prédiquées par l'un des 13 prédicats, eux-mêmes basés sur une combinaison des quatre codes de condition définis par l'instruction précédente. Le jeu d'instructions Thumb d'ARM (1994) a abandonné l'exécution conditionnelle afin de réduire la taille des instructions à 16 bits. Son successeur, Thumb-2 (2003), a résolu ce problème grâce à une instruction spéciale dont le seul effet est de fournir les prédicats des quatre instructions suivantes. Le jeu d'instructions 64 bits introduit dans ARMv8-A (2011) a remplacé l'exécution conditionnelle par des instructions de sélection conditionnelle.

SIMD, SIMT et prédiction vectorielle

SIMD SWAR (Inside a Register ), comme AVX2, permettent d'utiliser un masque logique pour charger/stocker conditionnellement des valeurs en mémoire, sous une forme parallèle du déplacement conditionnel. Ils peuvent également appliquer des bits de masque individuels à des unités arithmétiques exécutant une opération parallèle. Un bit de masque de prédicat est disponible pour chaque sous-mot du registre SWAR ou pour chaque valeur chargée/stockée. Cette forme de prédication multibit est également utilisée dans les processeurs vectoriels au niveau des éléments (synonyme de sous-mots SWAR).

processeurs matriciels tels que l' ILLIAC IV . Ces processeurs sont aujourd'hui connus sous le nom de processeurs SIMT (Single Instruction, Multiple Threads ), et chaque élément de traitement (PE ) possède un bit de prédicat permettant de l'activer ou de le désactiver. Lorsqu'un PE ne contient pas d'instructions SIMT dans un registre , chaque PE peut être prédité individuellement.

Les GPU SIMT modernes utilisent (ou utilisaient, mais la documentation ILLIAC IV l'appelait « branchement » ) la prédication pour activer/désactiver les éléments de traitement individuels et , séparément et en outre, pour masquer également les sous-mots dans l'ALU SWAR de chaque PE donné.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index