Qu'est-ce que Architecture du jeu d'instructions (ISA) ?

Spécification du processeur vue par le logiciel : instructions exécutables, registres, etc. Exemples : x86, Arm, RISC-V.

Nom japonais: 命令セットアーキテクチャ(ISA)

« Architecture du jeu d'instructions (ISA) » apparaît dans 12 questions d'entraînement réparties sur 4 thèmes, dont ISA et assembleur, CPU et architecture, Analyse des performances.

Domaine: CPU et architecture

Ce que spécifie une ISA

Une architecture du jeu d'instructions (ISA) est le contrat entre le logiciel et le matériel du processeur. Elle définit les instructions et leurs codages binaires, les registres visibles par les programmes, les types de données et les modes d'adressage, l'ordonnancement des accès mémoire, les niveaux de privilège et le comportement des interruptions et exceptions. Tout ce que définit l'ISA constitue l'état architectural que le code machine peut observer et sur lequel il peut s'appuyer. Un assembleur traduit les mnémoniques d'assemblage presque une à une en ces codages, c'est pourquoi chaque ISA a son propre langage d'assemblage.

ISA et microarchitecture

La microarchitecture est la manière dont un processeur donné implémente l'ISA : profondeur du pipeline, taille des caches, prédicteurs de branchement, nombre d'instructions émises par cycle. Une même ISA peut être implémentée par de minuscules cœurs basse consommation comme par de grands cœurs à exécution dans le désordre, qui exécutent le même code machine à des vitesses très différentes. Dans l'équation de performance, temps d'exécution = nombre d'instructions × cycles par instruction (CPI) × durée de cycle, l'ISA et le compilateur fixent principalement le nombre d'instructions, la microarchitecture le CPI, et les circuits et la technologie de fabrication la durée de cycle. Les attaques de type Spectre exploitent cette frontière : l'état architectural issu d'une spéculation erronée est annulé, mais pas le contenu des caches.

Choix de conception qui façonnent le matériel

Les détails de l'ISA ont des conséquences durables sur le matériel. Les instructions de base de RISC-V font 32 bits fixes (formes 16 bits uniquement avec l'extension compressée C), si bien que les limites d'instructions sont évidentes, tandis que les instructions x86 font de 1 à 15 octets et doivent être partiellement décodées pour savoir où commence la suivante, ce qui complique les décodeurs larges. Les branchements x86 testent des indicateurs (flags) positionnés par une comparaison antérieure ; RISC-V compare deux registres au sein même du branchement, sans état d'indicateur implicite à suivre. Le slot de délai de branchement de MIPS a montré le risque d'inscrire les particularités d'un pipeline donné dans une ISA qui lui survit.

ISA modulaires et ouvertes

RISC-V est une ISA ouverte dont la spécification peut être implémentée par quiconque sans redevance de licence. Elle combine un petit jeu d'instructions entières de base (RV32I ou RV64I, environ 40 instructions) avec des extensions optionnelles : M pour la multiplication et la division, A pour les opérations atomiques, F et D pour la virgule flottante, C pour les instructions compressées, V pour les vecteurs, ainsi que des instructions personnalisées. Omettre une extension économise de la surface mais coûte en vitesse : sans M, le compilateur transforme une multiplication en C en appel à une routine de bibliothèque qui multiplie par décalages et additions. Arm et x86 sont propriétaires, et sont concédés sous licence ou implémentés par leurs détenteurs.

S'entraîner : questions sur Architecture du jeu d'instructions (ISA)

Quelle affirmation concernant deux CPU adoptant la même architecture de jeu d'instructions (ISA) est correcte ?

  1. AComme ils sont construits avec la même organisation de circuits, leurs performances et leur consommation sont identiques
  2. BMême si leur organisation interne diffère, ils peuvent exécuter le même programme en langage machine
  3. CIls doivent être fabriqués dans la même usine de semi-conducteurs avec le même procédé
Afficher la réponse et l'explication

Réponse : B. Même si leur organisation interne diffère, ils peuvent exécuter le même programme en langage machine

L'ISA est le contrat entre logiciel et matériel qui définit les types d'instructions, l'agencement de leurs bits, le nombre de registres, etc. L'organisation interne, comme le nombre d'étages du pipeline, la taille des caches ou la méthode de prédiction de branchement, s'appelle la microarchitecture et se définit indépendamment de l'ISA. Ainsi, pour une même ISA, il existe de petits cœurs basse consommation et de grands cœurs hautes performances, aux performances et consommations différentes, mais qui exécutent le même programme en langage machine. L'usine et le procédé de fabrication sont également sans rapport avec l'ISA.

Questions fréquentes

Quelle est la différence entre une ISA et une microarchitecture ?

L'ISA est la spécification que voit le logiciel : instructions, registres et comportement. La microarchitecture est une conception matérielle particulière qui implémente cette spécification : deux processeurs de microarchitectures différentes peuvent donc exécuter les mêmes programmes s'ils partagent la même ISA.

x86, Arm et RISC-V sont-ils des architectures de jeu d'instructions ?

Oui. Ce sont trois ISA différentes : le code machine compilé pour l'une ne peut pas s'exécuter directement sur une autre, même si chacune est implémentée par de nombreuses conceptions de processeurs différentes.

Quelle est la différence entre une ISA et une ABI ?

L'ISA définit ce que le processeur exécute, tandis que l'ABI est une convention logicielle construite par-dessus, qui couvre les conventions d'appel, la taille des types de données et les appels système. Une même ISA peut avoir plusieurs ABI, par exemple pour différents systèmes d'exploitation.

« Architecture du jeu d'instructions (ISA) » dans les explications

Questions mentionnant « Architecture du jeu d'instructions (ISA) » (12)

  1. Quelle affirmation concernant deux CPU adoptant la même architecture de jeu d'instructions (ISA) est correcte ?
  2. Que désignent principalement les noms ARM, x86 et RISC-V ?
  3. Quelle caractéristique de RISC-V est correcte ?
  4. Quelle relation entre langage assembleur et langage machine est correcte ?
  5. En RISC-V, quelle est la méthode courante pour charger dans un registre une constante de 32 bits qui ne tient pas dans un immédiat de 12 bits (par exemple 0x12345678) ?
  6. Quel est l'objectif de l'exécution de « addi sp, sp, -16 » au début d'une fonction RISC-V ?
  7. Quelles instructions l'extension M de RISC-V ajoute-t-elle au jeu d'instructions entières de base ?
  8. En compilant « a * b » (multiplication de deux int) en C pour un CPU RV32I sans extension M, que se passe-t-il généralement ?
  9. Quelle affirmation concernant le delay slot de branchement des anciens MIPS notamment (règle selon laquelle l'instruction suivant immédiatement un branchement est exécutée que le branchement soit pris ou non) est correcte ?
  10. Quelle description de l'ABI (interface binaire d'application) est correcte ?
  11. Quelle est la formule de base correcte du temps d'exécution d'un programme sur un CPU ?
  12. Pourquoi des informations fuient-elles lors d'attaques comme Spectre, alors que les résultats des instructions exécutées spéculativement sont annulés ?

Comparatifs incluant ce terme

Termes associés

Pipeline Prédiction de branchement Assembleur Cadre de pile (stack frame) Adresse de retour Instructions compressées Microcontrôleur Créneau de délai de branchement (delay slot) ABI (interface binaire d'application) Convention d'appel

Retour au glossaire