La potenza di due bit per parola è "conveniente"? Se lo è, perché è così?

11

Trovo diverse fonti che sostengono che la potenza di due bit in una parola binaria (come 8 bit per byte) è una "buona cosa" o "conveniente". Non trovo nessuna fonte che indichi perché.

Da Qual è la storia del perché i byte sono otto bit? leggiamo nella risposta approvata:

Binary computers motivate designers to making sizes powers of two.

Ok, ma perché? Nella stessa domanda, ma nel campo dei commenti per la domanda trovo:

Is the last sentence in jest? A 12-bit byte would be inconvenient because it's not a power of 2. - robjb

Di nuovo, vuoto di logica ...

address calculations are a heck of a lot simpler with powers of 2, and that counts when you're making logic out of raw transistors in little cans - Mike

Poiché i byte sono la più piccola unità indirizzabile, questo non ha molto senso. Un sacco di voti positivi sul commento. Forse mi sono perso qualcosa.

Da Wikipedia :

The de facto standard of eight bits is a convenient power of two permitting the values 0 through 255 for one byte

E questo sarebbe conveniente perché ...?

Per chiarimenti, si tratta del numero di bit per byte (ad esempio 8 o 6, ecc.), non il numero di valori per byte (es. 2 8 o 2 6 , ecc.). A causa della confusione sottolineo anche che non si tratta di dimensioni di Word.

Non sono eccessivamente interessato a ragioni storiche. Quelli sono stati ben spiegati altrove (vedi link).

Domanda correlata su SO: link

    
posta Andreas 09.08.2016 - 19:32
fonte

6 risposte

10

Non penso che i byte da 8 bit abbiano avuto successo perché hanno una larghezza che è una potenza di due. Se non vuoi indirizzare i bit individualmente - e questa è una caratteristica comune né ora né in passato - avere una potenza di due non ha alcuna reale importanza pratica (è solo - ora molto più che in passato quando risparmi alcuni componenti discreti erano importanti - un riflesso per gli ingegneri hardware e software e il mantenimento in un terreno familiare è importante per altri scopi), e non ricordo di averlo menzionato nella mia storia delle letture informatiche (1). Uno aveva bisogno di casi inferiori, il che significava qualcosa di più dei set di caratteri a 6 bit allora dominanti. ASCII era a 7-bit, ma l'ASCII era allora puramente come per l'interscambio (e quindi per essere tradotto in codice interno per la gestione), e quindi

The Subcommmitee recognizes that computer manufacturer are unlikely to design computers that use 7-bit codes internally. They are more likely to use 4-bit, 6-bit, and 8-bit codes. There is no widespread need at the present for interchange of more than 128 separate and distinct characters between computers, and between computers and associated input/output equipment. [paper tape, which had a natural frame size of 8 bits but needed parity so the payload of a frame was 7 bits is also cited in favor of 7-bit char for ASCII, power of two is not cited among the advantages of 8 bits] (2)

e per l'hardware il byte di 8 bit ha vinto perché ha permesso di comprimere 2 cifre decimali in un byte alla volta quando il 75% dei dati era numerico e rappresentato in BCD (3).

(1) ad esempio Blaauw e Brooks, Computer Architecture ; MacKenzie, Set di caratteri codificati, storia e sviluppo hanno entrambi una discussione su questo argomento.

(3) Documento di X3.2 - Subcommitee responsabile di ASCII - citato da MacKenzie.

(3) MacKenzie, di nuovo.

    
risposta data 11.08.2016 - 20:06
fonte
2

A parte l'incidente storico, non c'è una ragione particolare per cui dovremmo usare 8/16/32/64 bit. Suppongo che il 12/24/48/96 bit sarebbe davvero più utile.

Per la gestione del testo, Unicode utilizzando un'ipotetica UTF-24 sarebbe più economico di UTF32; l'ipotetico UTF-12 memorizzerebbe tutti i caratteri UTF-8 a byte singolo e doppio in 12 bit e tutti i caratteri UTF-8 a triplo e quad byte in 24 bit (l'intervallo sarebbe leggermente ridotto a 2 ^ 20 caratteri, ma è ancora quattro volte più di quanto è generosamente usato); il codice sarebbe più semplice perché ci sono solo due varianti.

Di solito, a virgola mobile, 48 bit è sufficiente. 96 bit è sostanzialmente migliore di 80 bit esteso. 24 bit è utile per la grafica; molto più utile del 16 bit supportato da alcune schede grafiche. I puntatori a 48 bit possono gestire 256 terabyte.

L'unico svantaggio sono gli array di bit, in cui una divisione per 12 deve calcolare le posizioni dei byte. Se questo è ritenuto importante, sono sicuro che la divisione per 12 può essere implementata in modo abbastanza efficiente nell'hardware.

    
risposta data 11.08.2016 - 21:52
fonte
2

Ciò è conveniente a causa di architetture hardware comuni che utilizzano multipli di 8, ad es. Architetture a 32 e 64 bit. Ciò significa maggiore efficienza quando si utilizza la memorizzazione e la trasmissione di dati a 8 bit.

"Tuttavia, le considerazioni di economia nel design spingono strongmente verso una dimensione, o pochissime dimensioni legate da multipli o frazioni (sottomultipli) a una dimensione primaria, che la dimensione preferita diventa la dimensione della parola dell'architettura."

Word (architettura del computer)

Vedi anche: Qual è la cronologia del motivo per cui i byte sono otto bit?

    
risposta data 09.08.2016 - 19:48
fonte
1

Secondo l'articolo di Wikipedia per parola , questo rende i calcoli relativi all'indirizzamento la memoria è notevolmente più semplice:

Different amounts of memory are used to store data values with different degrees of precision. The commonly used sizes are usually a power of two multiple of the unit of address resolution (byte or word). Converting the index of an item in an array into the address of the item then requires only a shift operation rather than a multiplication. In some cases this relationship can also avoid the use of division operations. As a result, most modern computer designs have word sizes (and other operand sizes) that are a power of two times the size of a byte.

    
risposta data 12.08.2016 - 03:02
fonte
0

È strettamente correlato allo spazio degli indirizzi. Aggiungendo un altro bit al bus degli indirizzi, è possibile indirizzare il doppio delle posizioni di memoria. Quindi, quando aggiungi quella linea in più, potresti anche usarla fino in fondo.

Questo porta ad una progressione naturale di 1, 2, 4, 8, 16, 32 ecc.

A livello tecnico di produzione è anche facile ripetere lo stesso modello litografico. Cioè, per raddoppiarlo. Se inizi con un latch e poi raddoppi il pattern, passerai 8, non 6, 10 o 12.

    
risposta data 11.08.2016 - 23:57
fonte
0

Non sempre le word width hanno una potenza di due. Recentemente ho eseguito alcune operazioni di codifica in un DSP SHARC che ha una larghezza di parola di 32 bit per i numeri ma non per gli opcode (che hanno una larghezza di 48 bit).

Probabilmente il motivo per cui la larghezza delle parole è una potenza di due è a causa di alcune istruzioni che testano (o impostano o azzerano) un singolo bit o spostamento (o rotazione) a sinistra o a destra di un numero specificato di bit. C'è un campo di bit nell'opcode per specificare la posizione del singolo bit o il numero di bit da spostare. Se la larghezza della parola è una potenza di due, questo campo di bit richiede log 2 (word_width) bit per coprire l'intera parola. Vale a dire, una parola larga 32 bit richiede un campo a 5 bit nell'opcode per queste operazioni. Se la parola fosse larga 33 bit, sarebbe necessario 6 altrimenti non potrebbe coprire l'intera parola, ma sarebbe anche il caso se la parola fosse larga 64 bit.

I bit in un opcode sono estremamente preziosi, quindi di solito non li vogliono sprecare. Quindi ha senso rendere la parola una potenza di 2 di larghezza.

I byte di motivazione hanno una larghezza di 8 bit è che è la più piccola potenza di due che può contenere un carattere ASCII (che è 7 bit).

    
risposta data 13.08.2016 - 03:11
fonte

Leggi altre domande sui tag