Jeu d'instructions compressé - Compressed instruction set
Un jeu d'instructions comprimé , ou simplement des instructions compressées , sont une variation sur un microprocesseur de l' architecture de jeu d'instructions (ISA) qui permet aux instructions d'être représentés dans un format plus compact. Dans la plupart des exemples du monde réel, les instructions compressées ont une longueur de 16 bits dans un processeur qui utiliserait autrement des instructions de 32 bits. L'ISA 16 bits est un sous-ensemble de l'ISA 32 bits complet, et non un jeu d'instructions séparé. Le format plus petit nécessite certains compromis, généralement, il y a moins d'instructions disponibles et moins de registres de processeur peuvent être utilisés.
Le concept a été introduit à l'origine par Hitachi comme un moyen d'améliorer la densité de code de la conception de leur processeur SuperH RISC alors qu'il passait d'instructions 16 bits à 32 bits dans la version SH-5. La nouvelle conception comportait deux jeux d'instructions, l'un donnant accès à l'intégralité de l'ISA de la nouvelle conception, et un jeu plus petit de 16 bits connu sous le nom de SHcompact qui permettait aux programmes de s'exécuter dans de plus petites quantités de mémoire principale . Comme la mémoire des systèmes les plus petits est maintenant d'un ordre de grandeur plus grande, la taille n'est plus la principale préoccupation ; aujourd'hui, l'avantage est qu'il réduit le nombre d'accès à la mémoire principale et réduit ainsi la consommation d'énergie dans les appareils mobiles .
L'introduction de l'informatique 64 bits a conduit à ce que le terme ne soit plus aussi largement utilisé ; ces processeurs utilisent généralement des instructions 32 bits et sont techniquement une forme d'ISA compressée, mais comme il s'agit principalement de versions modifiées d'un ISA plus ancien à partir d'une version 32 bits de la même famille de processeurs ; il n'y a pas vraiment de compression. Les brevets d'Hitachi ont été concédés sous licence par Arm Ltd. pour leurs processeurs, où ils étaient connus sous le nom de « Thumb ». Des systèmes similaires se trouvent dans MIPS16e et PowerPC VLE. Les brevets originaux ont expiré et le concept se retrouve dans un certain nombre de conceptions modernes, y compris le RISC-V , qui a été conçu dès le départ pour l'utiliser.
Concept
Les microprocesseurs codent leurs instructions sous la forme d'une série de bits , normalement divisés en un certain nombre d' octets de 8 bits . Par exemple, dans le MOS 6502 , l' ADCinstruction effectue une addition binaire entre une valeur d'opérande et la valeur déjà stockée dans l' accumulateur . Il existe une variété d'endroits où le processeur peut trouver l'opérande ; il peut être situé dans la mémoire principale , ou dans la page zéro spéciale , ou être une constante explicite comme "10". Chacune de ces variantes utilisait une instruction 8 bits différente, ou opcode ; si on voulait ajouter la constante 10 à l'accumulateur l'instruction serait encodée en mémoire sous la forme $69 $0A, avec l'hexadécimal $0A pour 10, alors que si on ajoutait la valeur stockée en mémoire principale à l'emplacement $4400, ce serait $6D $0044, avec un peu adresse endian .
Notez que la deuxième instruction nécessite trois octets car l'adresse mémoire a une longueur de 16 bits. Selon l'instruction, il peut utiliser un, deux ou trois octets. Ceci est maintenant connu comme un jeu d'instructions de longueur variable , bien que ce terme n'était pas courant à l'époque car la plupart des processeurs, y compris les ordinateurs centraux et les mini - ordinateurs , utilisaient une certaine variation de ce concept. Même à la fin des années 1970, alors que les microprocesseurs commençaient à passer du format 8 bits au format 16, ce concept restait courant ; l' Intel 8088 a continué à utiliser des opcodes 8 bits qui pouvaient être suivis de zéro à six octets supplémentaires selon le mode d'adressage .
C'est lors du passage aux systèmes 32 bits, et surtout lorsque le concept RISC a commencé à prendre le dessus sur la conception des processeurs, que les instructions de longueur variable ont commencé à disparaître. Dans l' architecture MIPS , par exemple, toutes les instructions sont une seule valeur de 32 bits, avec un opcode de 6 bits dans les bits les plus significatifs et les 26 bits restants utilisés de diverses manières représentant son ensemble limité de modes d'adressage. La plupart des conceptions RISC sont similaires. Le passage à un format d'instruction de longueur fixe était l'un des concepts de conception clés à l'origine des performances des premières conceptions RISC ; dans les systèmes antérieurs, la lecture de l'instruction pouvait nécessiter un à six cycles de mémoire, ce qui nécessitait un câblage entre différentes parties de la logique pour garantir que le processeur n'essayait pas d'exécuter l'instruction avant que les données ne soient prêtes. Dans les conceptions RISC, les opérations prennent normalement un cycle, ce qui simplifie grandement le décodage. Les économies réalisées dans ces circuits de verrouillage sont plutôt appliquées à la logique supplémentaire ou à l'ajout de registres de processeur , qui ont un impact direct sur les performances.
Densité de code
L'inconvénient de l'approche RISC est que de nombreuses instructions ne nécessitent tout simplement pas quatre octets. Par exemple, l' instruction Logical Shift Left décale les bits d'un registre vers la gauche et ne nécessite que le code opération de l'instruction et un numéro de registre. Dans le 6502, qui a un seul registre arithmétique A, et n'a donc même pas besoin de numéro de registre, l' ASLinstruction occupe un octet. En théorie, MIPS n'a besoin que d'un opcode de 6 bits et d'un numéro de registre de 5 bits pour cette même opération, et en théorie, pourrait contenir l'instruction dans une valeur de 16 bits. Mais comme c'est le cas pour la plupart des conceptions RISC, l'instruction occupe toujours 32 bits. Comme ces types d'instructions sont relativement courants, les programmes RISC occupent généralement plus de mémoire que le même programme sur un processeur de longueur variable.
Dans les années 1980, lorsque le concept RISC a fait son apparition, il s'agissait d'un point de plainte courant. Comme les instructions prenaient plus de place, le système devrait passer plus de temps à lire les instructions de la mémoire. Il a été suggéré que ces accès supplémentaires pourraient en fait ralentir le programme. Une analyse comparative approfondie a finalement démontré que RISC était plus rapide dans presque tous les cas, et cet argument s'est estompé. Cependant, il existe des cas où l'utilisation de la mémoire reste un problème quelles que soient les performances, et c'est dans les petits systèmes et les applications embarquées. Même au début des années 2000, le prix de la DRAM était suffisant pour que les appareils sensibles aux coûts aient une mémoire limitée. C'est pour ce marché qu'Hitachi a développé le design SuperH .
Dans les conceptions SuperH antérieures, SH-1 à SH-4, les instructions occupent toujours 16 bits. Le jeu d'instructions résultant a des limitations du monde réel ; par exemple, il ne peut effectuer que des mathématiques à deux opérandes de la forme A = A + B, alors que la plupart des processeurs de l'époque autorisaient A = B + Cle format à trois opérandes. En supprimant un opérande, quatre bits sont supprimés de l'instruction (il y a 16 registres, nécessitant 4 bits), bien que cela ait pour conséquence de rendre le code mathématique un peu plus complexe à écrire. Pour les marchés ciblés par le SuperH, il s'agissait d'un compromis facile à faire. Un avantage significatif du format 16 bits est que le cache d'instructions contient désormais deux fois plus d'instructions pour une quantité donnée de SRAM . Cela permet au système de fonctionner à des vitesses plus élevées, bien que certaines d'entre elles puissent être atténuées par l'utilisation d'instructions supplémentaires nécessaires pour effectuer des opérations qui pourraient être effectuées par une seule instruction à 3 opérandes.
Pour le SH-5, Hitachi est passé à un format d'instructions 32 bits. Afin de fournir une compatibilité descendante avec leurs conceptions antérieures, ils ont inclus un deuxième jeu d'instructions, SHcompact. SHcompact a mappé les instructions 16 bits d'origine dans un sens sur l'instruction interne 32 bits ; il n'effectuait pas plusieurs instructions comme ce serait le cas dans les processeurs microcodés antérieurs , il s'agissait simplement d'un format plus petit pour la même instruction. Cela a permis aux programmes originaux de petit format d'être facilement portés sur le nouveau SH-5, tout en ajoutant peu à la complexité du décodeur d'instructions .
ARM a concédé sous licence un certain nombre de brevets d'Hitachi sur des aspects de la conception des instructions et les a utilisés pour mettre en œuvre leurs instructions Thumb. Les processeurs ARM avec un "T" dans le nom incluaient ce jeu d'instructions en plus de leurs versions 32 bits d'origine, et pouvaient passer du mode 32 au mode 16 bits à la volée à l'aide de la BXcommande. En mode pouce, seuls les huit premiers registres des seize registres normaux de l'ARM sont visibles, mais ce sont les mêmes registres qu'en mode 32 bits et les données peuvent donc être transmises entre le pouce et le code normal à l'aide de ces registres. Chaque instruction Thumb était une contrepartie d'une version 32 bits, donc Thumb était un sous-ensemble strict de l'ISA d'origine. L'une des principales différences entre le modèle ARM et SuperH est que Thumb conserve des instructions à trois opérandes au format 16 bits, ce qu'il a accompli en réduisant le fichier de registre visible à huit, de sorte que seuls 3 bits sont nécessaires pour sélectionner un registre.
L' architecture MIPS a également ajouté un ensemble compressé similaire dans leur MIPS16e, qui est très similaire à Thumb. Il permet aussi d'utiliser seulement huit registres, bien que ce ne soient pas simplement les huit premiers ; la conception MIPS utilise le registre 0 comme registre zéro , donc les registres 0 et 1 en mode 16 bits sont plutôt mappés sur les registres MIPS32 16 et 17. La plupart des autres détails du système sont similaires au pouce. De même, la dernière version du Power ISA , anciennement PowerPC , comprend les instructions « VLE » qui sont essentiellement identiques. Ceux-ci ont été ajoutés à la demande de Freescale Semiconductor , dont l'intérêt pour Power est principalement destiné au marché de l'embarqué.
Utilisation moderne
À partir d'environ 2015, de nombreux processeurs sont passés au format 64 bits. Ceux-ci ont généralement conservé un format d'instruction 32 bits, tout en étendant les registres internes à un format 64 bits. Selon la définition originale, ce sont des instructions compressées, car elles sont plus petites que la taille des mots de données de base. Cependant, ce terme n'est pas utilisé dans ce contexte, les références à des instructions compressées font invariablement référence à des versions 16 bits.
Les références
Citations
Bibliographie
- Tisserand, Vincent ; McKee, Sally (2009). Problèmes de densité de code pour les nouvelles architectures (PDF) . ICCD 2009.
- Verts, Guillaume (30 janvier 2004). "Le processeur 6502" (PDF) . Université du Massachusetts .
- Lemieux, Joe (24 septembre 2004). "Introduction au pouce ARM" . intégré .
- Moteur SuperH RISC SH-1/SH-2 (PDF) . Hitachi Amérique. 3 septembre 1996.