Question Pourquoi le nombre de bits est-il toujours (?) Une puissance de deux?


Nous disposons d'architectures et de systèmes d'exploitation matériels 8 bits, 16 bits, 32 bits et 64 bits. Mais pas, disons, 42 bits ou 69 bits.

Pourquoi? Est-ce quelque chose de fondamental qui fait de 2 ^ n bits un meilleur choix, ou est-ce juste une question de compatibilité avec les systèmes existants? (Il est évidemment pratique qu'un registre 64 bits puisse contenir deux pointeurs 32 bits ou qu'une unité de données 32 bits puisse en contenir 4).


48
2017-10-22 12:21


origine


Réponses:


C'est surtout une question de tradition. Ce n'est même pas toujours vrai. Par exemple, les unités à virgule flottante dans les processeurs (même contemporaines) ont des registres de 80 bits. Et rien ne nous obligerait à avoir des octets de 8 bits au lieu d'octets de 13 bits.

Parfois, cela a un raisonnement mathématique. Par exemple, si vous décidez d'avoir un octet de N bits et que vous souhaitez effectuer une multiplication par nombres entiers, vous avez besoin de exactement 2N bits pour stocker les résultats. Ensuite, vous souhaitez également ajouter / soustraire / multiplier ces nombres entiers de 2 bits et vous avez maintenant besoin de registres à usage général de 2 bits pour stocker les résultats d'addition / soustraction et de 4 bits pour stocker les résultats de la multiplication.


24
2017-10-22 12:25



http://en.wikipedia.org/wiki/Word_%28computer_architecture%29#Word_size_choice

Différentes quantités de mémoire sont utilisées pour stocker des valeurs de données avec différents degrés de précision. Les tailles couramment utilisées sont généralement une puissance de 2 multiple de l'unité de résolution d'adresse (octet ou mot). La conversion de l'index d'un élément d'un tableau en adresse de l'élément ne nécessite alors qu'une opération de décalage plutôt qu'une multiplication. Dans certains cas, cette relation peut également éviter l'utilisation d'opérations de division. En conséquence, la plupart des conceptions informatiques modernes ont des tailles de mots (et d’autres tailles d’opérandes) d’une puissance 2 fois supérieure à celle d’un octet.


22
2017-10-22 12:29



En partie, c'est une question d'adressage. Avoir N bits d’adresse vous permet de traiter 2 ^ N bits de mémoire au maximum, et les concepteurs de matériel préfèrent utiliser au maximum cette capacité. Donc, vous pouvez utiliser 3 bits pour adresser le bus 8 bits, etc.


19
2017-10-22 12:33



Le vénérable PDP-10 était de 36 bits.


8
2017-10-22 12:23



De nombreux processeurs pré-microprocesseurs (la plupart?) Ont un certain nombre de bits par mot qui ne sont pas une puissance de deux.

En particulier, Seymour Cray et son équipe ont construit de nombreuses machines très influentes avec des tailles de mots et des tailles d’adresses non puissantes: 12 bits, 48 ​​bits, 60 bits, etc.

Un nombre étonnamment élevé de premiers ordinateurs avaient des mots de 36 bits, entièrement dus au fait que les humains avaient 10 doigts. L'article «36 bits» de Wikipédia contient plus de détails sur la relation entre 10 doigts et 36 bits, et des liens vers des articles sur de nombreuses autres tailles de bits historiquement importantes mais non plus populaires, la plupart d'entre elles n'ayant pas la puissance de deux.

Je spécule que

(a) La mémoire adressable à 8 bits est devenue populaire car elle était légèrement plus pratique pour stocker des fichiers ASCII à 7 bits. et BCD 4 bits, sans encombrement ni perte de plusieurs bits par caractère; et aucune autre largeur de mémoire n'avait un grand avantage.

b) Comme le fait remarquer Stephen C. Steel, les économies d’échelle et les forces du marché multiplient ce léger avantage: davantage de mémoires à 8 bits sont utilisées et les économies d’échelle les rendent légèrement moins chères, ce qui conduit à des économies encore plus importantes 8 Mémoires à large bande utilisées dans les nouvelles conceptions, etc.

(c) En théorie, les largeurs de bus plus larges rendaient le processeur plus rapide, mais le placer sur une seule puce le rendait beaucoup moins cher et peut-être légèrement plus rapide que n'importe quel système multi-partie de bus. Au début, il y avait à peine assez de transistors pour un processeur 4 bits, puis un processeur 8 bits. Plus tard, il y avait à peine assez de transistors pour un processeur 16 bits, une énorme fanfare et une campagne marketing "16 bits". Juste autour du temps on s'attendrait à un processeur 24 bits ...

(d) la révolution RISC a frappé. Les deux premières puces RISC étaient de 32 bits, pour quelque raison que ce soit, et les gens avaient été conditionnés à penser que "plus de bits sont meilleurs", donc chaque constructeur a pris le train à 32 bits. En outre, IEEE 754-1985 a été normalisé avec des nombres à virgule flottante de 32 et 64 bits. Il y avait des processeurs 24 bits, mais la plupart des gens n'en ont jamais entendu parler.

(e) Pour des raisons de compatibilité logicielle, les fabricants ont conservé l’illusion d’un bus de données 32 bits même sur des processeurs avec un bus frontal 64 bits (tels que Intel Pentium et AMD K5, etc.) ou sur des cartes mères de 4 bits. bus (bus LPC).


6
2017-10-22 12:32



Votre système de mémoire se veut un octet multiple, ce qui fait que votre cache veut être un octet multiple, ce qui fait que tout votre système veut être un octet multiple.

En tant que concepteur de matériel, vous devez généralement concevoir des limites de type CPU, c.-à-d. Des multiples de 8. Sinon, vous devez ajouter beaucoup de circuits complexes à un système 49 bits pour utiliser les bits mod-8. , ou vous finissez par ignorer les bits supplémentaires, auquel cas c'était un gaspillage, à moins que vous ayez besoin du bit supplémentaire pour les instructions, ce qui n'est jamais le cas sur les systèmes 16 bits ou plus larges.


4
2017-10-22 19:23



Comme d’autres l’ont souligné, au début, les choses n’étaient pas si claires: les mots étaient de toutes sortes de tailles bizarres.

Mais la tendance à la standardisation sur les octets de 8 bits était également due à la technologie des puces mémoire. Au début, de nombreuses puces de mémoire étaient organisées en 1 bit par adresse. La mémoire pour les mots à n bits a été construite en utilisant des puces de mémoire en groupes de n (avec les lignes d'adresse correspondantes liées entre elles et chaque bit contenant un seul bit de données contribuant à un bit du mot n).

À mesure que la densité des puces mémoire augmentait, les fabricants emballaient plusieurs puces en un seul paquet. Les tailles de mots les plus populaires étant des multiples de 8 bits, la mémoire 8 bits était particulièrement appréciée: cela signifiait qu'elle était également la moins chère. Alors que de plus en plus d'architectures accédaient au train à 8 bits, le prix des puces mémoire qui n'utilisaient pas d'octets à 8 bits devenait de plus en plus important. Des arguments similaires expliquent les mouvements de 8-> 16, 16-> 32, 32-> 64.

Vous pouvez toujours concevoir un système avec une mémoire de 24 bits, mais cette mémoire sera probablement beaucoup plus chère qu'une conception similaire utilisant une mémoire de 32 bits. À moins qu'il y ait une très bonne raison de rester sur 24 bits, la plupart des concepteurs opteraient pour 32 bits, à la fois moins chers et plus performants.


3
2017-09-05 12:15



À un moment donné, les longueurs de mots des ordinateurs avaient tendance à être un multiple de 6 bits, car les ordinateurs utilisaient généralement des jeux de caractères à 6 bits, sans prise en charge des lettres minuscules.

IBM a fabriqué un ordinateur haute performance, le STRETCH, pour Los Alamos, qui comportait un mot de 64 bits. Il était inhabituel que des bits individuels de la mémoire de l’ordinateur puissent être directement adressés, ce qui obligeait la longueur du mot à deux. Il disposait également d'un jeu de caractères plus étendu, qui permettait d'inclure des symboles mathématiques (en plus des minuscules); ils ont été utilisés dans un langage spécial de niveau supérieur nommé COLASL.

Lorsque IBM a sorti le système mainframe System / 360 très populaire, même s’il n’avait pas d’adressage de bits, il conservait l’octet de huit bits, principalement pour permettre un stockage efficace des quantités décimales compressées de quatre bits au chiffre décimal. Parce que cette machine était si populaire, elle était très influente et l'ordinateur PDP-11 de DEC était conçu avec un mot de 16 bits et des caractères de 8 bits. Le PDP-11 était également la première véritable machine à petit endian, et elle était également très populaire et influente.

Mais ce n'est pas simplement à cause de la mode suivante. Les caractères 8 bits autorisent le texte en minuscule et, à mesure que les ordinateurs deviennent moins chers, il est important de pouvoir les utiliser facilement pour le traitement de texte. Et tout comme le STRETCH devait avoir un mot qui avait une puissance de deux tailles en bits pour permettre aux bits d’être facilement adressés, les ordinateurs d’aujourd’hui devaient avoir un mot qui était un multiple de puissance de deux (ce qui se trouve être puissance deux à trois elle-même) pour permettre aux caractères d'être facilement adressés.

Si nous utilisions encore des caractères 6 bits, les ordinateurs auraient tendance à avoir des mots de 24, 48 ou 96 bits.


2
2017-10-22 12:30



En rapport, mais peut-être pas la raison, j'ai entendu que la convention de 8 bits dans un octet C’est parce qu’il s’agit de la façon dont IBM a mis au point l’architecture IBM System / 360.


1
2017-10-22 12:41



Une raison commune est que vous pouvez numéroter vos bits en binaire. Cela se révèle utile dans de nombreuses situations. Par exemple, dans les opérations bitshift ou rotation. Vous pouvez faire pivoter une valeur de 16 bits sur 0 à 15 bits. Une tentative de rotation sur 16 bits est également triviale: cela équivaut à une rotation sur 0 bit. Et une rotation sur 1027 bits équivaut à une rotation sur 3 bits. En général, une rotation d'un registre de largeur W sur N bits est égale à une rotation sur N modulo W, et l'opération "modulo W" est triviale lorsque W est une puissance de 2.


1
2017-10-22 15:04



Les 80186, 8086, 8088 et "Real Mode" sur les processeurs 80286 et ultérieurs utilisaient un système d'adressage de mémoire segmenté de 20 bits. Le 80286 avait 24 lignes d’adresse natives, puis le 386 et plus tard avaient 32 ou 64.


1
2017-10-22 15:19