La puissance de deux bits par mot est-elle «pratique»? Si c'est le cas, pourquoi?

11

Je trouve plusieurs sources affirmant que la puissance de deux bits dans un mot binaire (comme 8 bits par octet) est une "bonne chose" ou "pratique". Je ne trouve aucune source expliquant pourquoi.

De Quelle est l'histoire de pourquoi les octets sont huit bits? nous lisons dans la réponse approuvée:

Les ordinateurs binaires motivent les concepteurs à faire des puissances de taille de deux.

D'accord mais pourquoi? Dans la même question, mais dans le champ de commentaire de la question, je trouve:

La dernière phrase est-elle une plaisanterie? Un octet de 12 bits serait gênant car ce n'est pas une puissance de 2. - robjb

Encore une fois, sans justification ...

les calculs d'adresse sont beaucoup plus simples avec des puissances de 2, et cela compte lorsque vous créez une logique à partir de transistors bruts dans de petites boîtes - Mike

Comme les octets sont la plus petite unité adressable, cela n'a pas beaucoup de sens. Beaucoup de votes positifs sur le commentaire. Peut-être que j'ai raté quelque chose.

De Wikipédia :

La norme de facto de huit bits est une puissance pratique de deux permettant les valeurs de 0 à 255 pour un octet

Et ce serait pratique parce que ...?

Par souci de clarté, il s'agit du nombre de bits par octet (par exemple 8 ou 6, etc.), et non du nombre de valeurs par octet (par exemple 2 8 ou 2 6 , etc.). En raison de la confusion, je souligne également qu'il ne s'agit pas de la taille des mots.

Je ne suis pas trop intéressé par les raisons historiques. Celles-ci ont été bien expliquées ailleurs (voir liens).


Question connexe sur SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two

Andreas
la source
2
@gnat Je suis presque sûr que nous parlons ici du nombre de bits par octet (c'est-à-dire 8 dans un octet de 8 bits), pas du nombre de valeurs qu'un octet peut représenter (c'est-à-dire 2 ^ 8 dans un octet de 8 bits). Donc, si vous avez, par exemple, un octet de 6 bits, 6 n'est pas une puissance de deux , mais oui, un octet de 6 bits peut représenter une puissance de deux nombres de valeurs.
8bittree
2
@ 8bittree Je pense que je l'ai eu, merci pour l'explication! (vote en double rétracté - bien que je pense qu'il serait plus facile pour les lecteurs qu'une explication comme dans votre dernier commentaire soit éditée dans la question, cette chose semble plutôt subtile)
gnat
2
Question similaire sur SO: stackoverflow.com/q/1606827/3723423 - la réponse apporte des arguments plausibles sur la commodité
Christophe
2
@Snowman: Le message de l'OP contient une erreur "mendiant la question": "Pourquoi les puissances de deux sont-elles considérées comme des tailles d'octets pratiques?" Ils ne le sont pas. Cela n'a rien à voir avec des pouvoirs de deux; il a mal lu la phrase dans l'article Wikipedia.
Robert Harvey
3
@RobertHarvey Dans la réponse à "Quelle est l'histoire de pourquoi les octets sont huit bits?" (également lié dans ma question) il y a la phrase suivante: "Les ordinateurs binaires motivent les concepteurs à faire des tailles puissances de deux." Ai-je mal lu cela aussi? Que signifient les deux sources à votre avis? Dire simplement "vous vous êtes trompé" n'est pas vraiment le faire pour moi.
Andreas

Réponses:

10

Je ne pense pas que les octets 8 bits aient réussi car ils ont une largeur qui est une puissance de deux. Si vous ne voulez pas adresser les bits individuellement - et c'est une caractéristique commune ni maintenant ni dans le passé - avoir une puissance de deux n'a pas vraiment d'importance pratique (c'est juste - maintenant beaucoup plus que par le passé lorsque vous épargnez certains composants discrets étaient importants - un réflexe pour les ingénieurs matériels et logiciels et rester dans un terrain familier est important à d'autres fins), et je ne me souviens pas avoir vu mentionné dans mon histoire de lectures informatiques (1). Il fallait des minuscules, ce qui signifiait quelque chose de plus que les jeux de caractères alors dominants de 6 bits. ASCII était à 7 bits, mais ASCII était alors purement identique à celui de l'échange (et donc à traduire en code interne pour la gestion), et donc

Le Sous-comité reconnaît qu'il est peu probable que le fabricant d'ordinateurs conçoive des ordinateurs qui utilisent des codes 7 bits en interne. Ils sont plus susceptibles d'utiliser des codes 4 bits, 6 bits et 8 bits. Il n'y a pas à l'heure actuelle de besoin généralisé d'échange de plus de 128 caractères séparés et distincts entre les ordinateurs et entre les ordinateurs et les équipements d'entrée / sortie associés. [la bande de papier, qui avait une taille de trame naturelle de 8 bits mais une parité nécessaire, de sorte que la charge utile d'une trame était de 7 bits est également citée en faveur du caractère 7 bits pour ASCII, la puissance de deux n'est pas citée parmi les avantages de 8 bits ] (2)

et pour le matériel octet 8 bits gagné car il permettait de compresser 2 chiffres décimaux dans un octet à la fois lorsque 75% des données étaient numériques et représentées en BCD (3).

(1) par exemple Blaauw et Brooks, Computer Architecture ; MacKenzie, Coded Character Sets, History and Development ont tous deux une discussion à ce sujet.

(3) Document de X3.2 - le sous-comité responsable de l'ASCII - cité par MacKenzie.

(3) MacKenzie, encore une fois.

AProgrammer
la source
1
Je vous remercie. Votre réponse est parfaite et vous avez apporté des références. Vous avez mon vote. Je réalise cependant que si ce que vous dites est vrai, il est également impossible de le prouver. Je ne peux pas prouver la non-existence de quelque chose. Je suppose que je devrais vraiment interagir avec ceux qui revendiquent la «commodité» et vérifier leurs sources. C'est peut-être juste une rumeur répandue.
Andreas
L'autre facteur de commodité est qu'un octet peut être représenté facilement comme deux valeurs hexidécimales. Mettre deux décimales codées binaires (BCD) dans un octet est plus communément appelé décimal condensé. Cela était en effet considéré comme pratique car les décimales peuvent être lues comme décimales lorsque les données sont affichées en hexadécimal.
JimmyJames
Les octets de 12 bits peuvent être représentés facilement sous la forme de trois valeurs hexadécimales. Et vous pouvez stocker trois numéros BCD dans un octet de 12 bits. C'est sûrement beaucoup mieux que deux valeurs hexadécimales et deux nombres BCD. En fait, un octet de 10 bits peut contenir trois chiffres décimaux. Et je pense que c'est ainsi que fonctionne la norme décimale flottante IEEE.
gnasher729
1
@JimmyJames, je pense que vous inversez la causalité avec hexadécimal. L'hexadécimal est devenu populaire car c'était un moyen compact de représenter l'octet 8 bits, auparavant l'octal était beaucoup plus populaire (et il était plus populaire sur une machine comme le PDP-11 qui avait des octets 8 bits mais où les champs 3 bits étaient importants dans le codage du jeu d'instructions).
AProgrammer
@ gnasher729, l'octet 8 bits est un enfant des années 60. Passer d'un caractère 6 bits à un caractère 12 bits était impensable dans les années 60. Même aujourd'hui, quand nous sommes beaucoup moins contraints, l'UTF-8 est populaire parce que l'UTF-16 est jugé trop gaspilleur. Un octet de 10 bits était à peu près aussi impensable et le codage de 10 bits par 3 chiffres décimaux est également totalement impraticable lorsque vous examinez des valeurs dans des registres et en mémoire avec un panneau avant sans parler de l'impact sur la mise en œuvre avec la technologie de l'époque.
AProgrammer
2

À part un accident historique, il n'y a aucune raison particulière pour laquelle nous devrions utiliser le bit 8/16/32/64. Je suppose que 12/24/48/96 bits serait vraiment plus utile.

Pour gérer le texte, Unicode utilisant un UTF-24 hypothétique serait moins cher que l'UTF32; UTF-12 hypothétique stockerait tous les caractères UTF-8 à un et deux octets sur 12 bits, et tous les caractères UTF-8 à trois et quatre octets sur 24 bits (la plage serait légèrement réduite à 2 ^ 20 caractères, mais c'est toujours quatre fois plus que ce qui est généreusement utilisé); le code serait plus simple car il n'y a que deux variantes.

Pour la virgule flottante, 48 bits sont généralement suffisants. 96 bits est nettement meilleur que 80 bits étendu. 24 bits est utile pour les graphiques; beaucoup plus utile que le 16 bits pris en charge par certaines cartes graphiques. Les pointeurs 48 bits peuvent gérer 256 téraoctets.

Le seul inconvénient concerne les tableaux de bits, où une division par 12 est nécessaire pour calculer les positions d'octets. Si cela est jugé important, je suis sûr que la division par 12 peut être implémentée assez efficacement dans le matériel.

gnasher729
la source
Point intéressant sur UTF, bien que légèrement hors sujet. La taille en octets (ou bits) à virgule flottante est une bataille sans fin entre mémoire et précision où il suffit de vivre avec l'un ou l'autre. Bon point sur les tableaux de bits aussi.
Andreas
1
Pensées intéressantes, mais je ne suis pas sûr que cela réponde à la question.
1
La question était: "Pourquoi huit bits est-il considéré comme pratique". Sûrement dire "ce n'est pas" répond à la question.
gnasher729
1
@ gnasher729 La question était: "Pourquoi la puissance de deux bits par octet est-elle considérée comme pratique", bien que votre réponse semble également s'appliquer.
8bittree
2
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
yannis
2

Ceci est pratique en raison des architectures matérielles courantes utilisant des multiples de 8, par exemple des architectures 32 bits et 64 bits. Cela signifie une plus grande efficacité lors de l'utilisation du stockage et de la transmission de données 8 bits.

"Cependant, les considérations d'économie dans la conception poussent fortement à une taille, ou à très peu de tailles liées par des multiples ou des fractions (sous-multiples) à une taille primaire. Cette taille préférée devient la taille de mot de l'architecture."

Word (architecture informatique)

Voir aussi: Quelle est l'histoire de pourquoi les octets sont huit bits?

Brad Thomas
la source
5
Je n'accepterai pas cela comme une réponse. Ma question est de savoir pourquoi la puissance de deux est pratique, pas pourquoi la norme de facto est de 8 bits. Et l'histoire derrière 8 bits mentionne que 5, 6 et 7 bits sont utilisés pour de vraies raisons, alors que passer de 7 à 8 est motivé par un "meh, pourquoi pas". J'ai eu l'impression que la lecture de différentes sources de puissance de deux avait plus que la compatibilité avec les systèmes actuels. (En réalité, le 8 bits donne la parité des jeux de caractères à 7 bits.) Word est une chose différente où j'obtiens l'avantage de la puissance de deux tailles, c'est-à-dire que le décalage peut être utilisé au lieu de mult dans les calculs.
Andreas
3
@RobertHarvey Cette question ne concerne pas le nombre d'états par commutateur (c'est-à-dire binaire vs trinaire ou plus), mais le nombre de commutateurs à regrouper. Voir ma modification à la question.
8bittree
2
Quant à votre modification, il n'y a pas de distinction significative entre le nombre de bits par octet et le nombre de valeurs par octet. C'est deux façons d'exprimer la même chose. Le nombre de valeurs qu'un octet peut contenir découle directement du nombre de bits qu'il contient: un octet a 8 bits, et il peut donc contenir des valeurs jusqu'à 2⁸-1.
Robert Harvey
2
Logiquement, il s'ensuit que vous choisissez une taille d'octet pouvant contenir une plage numérique qui soit pratique. ASCII est de 7 bits car cela fournit 128 valeurs différentes, suffisamment pour encoder les deux cas de l'alphabet romain, les caractères numériques, la ponctuation, les caractères de contrôle et plusieurs caractères spéciaux. Un octet peut contenir 7 bits ASCII et un bit de parité pour la vérification des erreurs, pour un total de 8 bits, adapté à un télétype. Depuis, nous utilisons cette taille pour un octet.
Robert Harvey
2
@JeremyKato Les appareils que j'ai mentionnés sont plus anciens (époque des années 60-80, pour la plupart), c'est probablement pourquoi vous ne les connaissez pas. ASCII, est en fait un codage 7 bits (la parité ne fait pas partie de la norme). Mais pour l'essentiel de votre commentaire, non, je ne manque de rien. Je comprends qu'il y a des raisons pour lesquelles 8 bits en particulier est pratique, ce que vous et Robert Harvey manquez, c'est que la question porte sur les puissances de 2 bits en général , pas spécifiquement sur 8 bits.
8bittree
1

Selon un article de Wikipédia pour Word , cela facilite considérablement les calculs liés à l'adressage de la mémoire:

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 deux multiples 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) qui sont une puissance deux fois plus grande qu'un octet.

vartec
la source
2
Oui, puissance de deux fois la taille d'un octet. Il n'y a aucune raison inhérente pour qu'un octet soit huit bits et non neuf, douze ou quinze.
gnasher729
@ gnasher729, beaucoup plus facile à diviser par 8 (ou 16 ou 32 ou 64) qu'à diviser par 9 ou 12 ou 15.
robert bristow-johnson
@ gnasher729 si le mot est une puissance de 2 bits et une puissance de 2 octets, cela implique que l'octet doit être une puissance de 2 bits
vartec
@vartec L'article et la citation disent "Les tailles couramment utilisées sont généralement une puissance de deux multiples de l'unité de résolution d'adresse (octet ou mot)" et "la plupart des conceptions informatiques modernes ont des tailles de mot (et d'autres tailles d'opérande) qui sont une puissance de deux fois la taille d'un octet. " Je lis "la taille des mots" est mesurée en octets, pas en bits. Il n'y a pas de règle sur la taille des mots en bits qui est ou devrait être des pouvoirs de 2 dans l'article.
Andreas
@vartec: SI. Évidemment, personne ne construirait une machine avec des mots 32 bits et des octets 12 bits. Mais rien ne parle contre une machine avec des mots de 48 ou 96 bits et des octets de 12 bits. Et il y a eu des machines où un mot faisait dix octets.
gnasher729
0

Il est étroitement lié à l'espace d'adressage. En ajoutant un peu plus à votre bus d'adresses, vous pouvez adresser deux fois plus d'emplacements de mémoire. Ainsi, lorsque vous ajoutez cette ligne supplémentaire, vous pouvez tout aussi bien l'utiliser dans toute son étendue.

Cela conduit à une progression naturelle de 1, 2, 4, 8, 16, 32 et cetera.

Au niveau technique de production, il est également facile de répéter le même motif lithographique. Autrement dit, pour le doubler. Si vous commencez avec un verrou puis doublez le motif, vous passerez 8, pas 6, 10 ou 12.

Martin Maat
la source
1
Comment est-ce lié au nombre de bits dans un octet? Affirmez-vous sérieusement qu'un ET logique 32 bits est plus facile à mettre en œuvre que 36 ou 28 bits?
gnasher729
1
Je n'ai fait aucune telle réclamation. Ma suggestion est qu'elle découle de conceptions antérieures qui ont été progressivement étendues en largeur car les transistors sont devenus moins chers et les circuits intégrés autorisés pour les circuits plus petits.
Martin Maat
1
Théorie intéressante sur le niveau technique de production. Vous pourriez être sur quelque chose. Pourriez-vous étendre le paragraphe ou peut-être fournir un lien expliquant les bases?
Andreas
1
C'est n'importe quoi. Par exemple, dans une carte graphique où toutes sortes de tailles de bits impairs sont nécessaires à divers endroits, tout se fait exactement avec la taille requise, et pas un bit de plus. Si un décodeur h.264 a besoin d'une précision de 19 bits pour une opération, le matériel implémente 19 bits et non 20 ou 24 ou 32. Et excusez-moi, vous ne manipulez pas de modèles lithographiques. Vous définissez le matériel, puis vous l'exécutez via un logiciel qui crée la mise en page.
gnasher729
1
@MartinMaat: Vous confondez marketing + standardisation avec des raisons technologiques. Et la technologie est ce dont nous discutons.
gnasher729
0

Les largeurs de mots ne sont pas toujours une puissance de deux. J'ai récemment fait du codage dans un DSP SHArC qui a une largeur de mot de 32 bits pour les nombres mais pas pour les opcodes (qui ont une largeur de 48 bits).

La raison pour laquelle la largeur des mots est une puissance de deux est probablement due à certaines instructions qui testent (ou définissent, effacent ou basculent) un seul bit ou décalent (ou tournent) vers la gauche ou la droite d'un nombre spécifié de bits. Il y a un champ de bits dans l'opcode pour spécifier l'emplacement du bit unique ou le nombre de bits à décaler. Si la largeur du mot est une puissance de deux, ce champ de bits nécessite des bits de log 2 (word_width) pour couvrir le mot entier. C'est-à-dire qu'un mot de 32 bits de large a besoin d'un champ de 5 bits dans l'opcode pour ces opérations. Si le mot avait une largeur de 33 bits, il en faudrait 6 sinon il ne pourrait pas couvrir tout le mot, mais ce serait également le cas si le mot avait une largeur de 64 bits.

Les bits d'un opcode sont extrêmement précieux, donc ils ne veulent généralement pas les gaspiller. Ensuite, il est logique de faire du mot une puissance de 2 de large.

La raison pour laquelle les octets ont une largeur de 8 bits est que c'est la plus petite puissance de deux pouvant contenir un caractère ASCII (qui est de 7 bits).

robert bristow-johnson
la source
Ce n'est pas mon domaine d'expertise, mais cela semble être une raison valable pour une puissance de deux octets ET des tailles de mot. J'imagine que vous devez aussi vous soucier moins de l'UB. Pour un décalage, 33 bits nécessiteraient un opcode 6 bits, mais seulement environ la moitié des valeurs possibles (0-32) ont une signification utile. Accepteriez-vous?
Andreas
l'opcode doit être plus large que le champ de bits nécessaire pour le compte de décalage. un octet n'est rien d'autre qu'un mot de 8 bits. la raison pour laquelle le matériel informatique a tendance à utiliser des tailles de mots qui sont 8 ou 16 ou 32 ou 64 bits (ce n'est pas toujours le cas, l'ancien DSP56000 avait des mots de 24 bits) est due aux raisons que j'ai données ci-dessus et à la raison donnée par vartec : étant donné un bitmap de mots emballés et vous obtenez un numéro de ligne et de colonne d'un pixel particulier, il faut diviser le numéro de colonne par la largeur du mot pour savoir à quel mot accéder pour tester ou changer le pixel. diviser par une puissance de 2 est facile.
robert bristow-johnson
Qu'est-ce qu'un "bitmap de mots emballés"? Est-ce que HighColor correspond à cette description?
Andreas
@ robertbristow-johnson: manque total d'imagination. Avec des octets de 9 bits, nous utiliserions des mots de 36 bits, 130 millions de couleurs au lieu de 16 millions de couleurs en RGBA, RGB666 au lieu de RGB555 ou la monstruosité RGB565 pour des couleurs de faible qualité, et tout irait bien. Et ASCII comprendrait 512 caractères jusqu'au latin étendu.
gnasher729
@Andreas, non, je voulais dire deux "couleurs". totalement blanc ou totalement noir.
robert bristow-johnson