Calcolo a 128 bit

Nell’architettura dei computer, gli interi a 128 bit, gli indirizzi di memoria o altre unità di dati sono quelli che sono larghi 128 bit (16 ottetti). Inoltre, le architetture di CPU e ALU a 128 bit sono quelle che sono basate su registri, bus di indirizzi o bus di dati di quella dimensione.

Mentre non ci sono attualmente processori general-purpose costruiti per operare su interi o indirizzi a 128 bit, un certo numero di processori hanno modi specializzati per operare su pezzi di dati a 128 bit. L’IBM System/370 potrebbe essere considerato il primo computer semplice a 128 bit, dato che usava registri in virgola mobile a 128 bit. La maggior parte delle CPU moderne hanno set di istruzioni SIMD (Streaming SIMD Extensions, AltiVec ecc.) dove i registri vettoriali a 128 bit sono usati per memorizzare diversi numeri più piccoli, come quattro numeri in virgola mobile a 32 bit. Una singola istruzione può quindi operare su tutti questi valori in parallelo. Tuttavia, questi processori non operano su numeri individuali che sono lunghi 128 cifre binarie; solo i loro registri hanno la dimensione di 128 bit.

Il DEC VAX supportava operazioni su tipi di dati interi a 128 bit (‘O’ o octaword) e floating-point a 128 bit (‘H-float’ o HFLOAT). Il supporto per tali operazioni era un’opzione di aggiornamento piuttosto che una caratteristica standard. Poiché i registri del VAX erano larghi 32 bit, un’operazione a 128 bit usava quattro registri consecutivi o quattro longword in memoria.

La serie ICL 2900 forniva un accumulatore a 128 bit, e il suo set di istruzioni includeva l’aritmetica in virgola mobile e decimale compresso a 128 bit.

Nello stesso modo in cui i compilatori emulano ad esempio l’aritmetica intera a 64 bit su architetture con dimensioni di registro inferiori a 64 bit, alcuni compilatori supportano anche l’aritmetica intera a 128 bit. Per esempio, il compilatore GCC C 4.6 e successivi ha un tipo di intero a 128 bit __int128 per alcune architetture. GCC e i compilatori compatibili segnalano la presenza dell’aritmetica a 128 bit quando la macro __SIZEOF_INT128__ è definita. Per il linguaggio di programmazione C, il supporto a 128 bit è opzionale, ad esempio tramite il tipo int128_t, o può essere implementato da un’estensione specifica del compilatore. Il linguaggio di programmazione Rust ha un supporto integrato per gli interi a 128 bit, che è implementato su tutte le piattaforme. Un tipo a 128 bit fornito da un compilatore C può essere disponibile in Perl tramite il modulo Math::Int128.

Un registro a 128 bit può memorizzare 2128 (oltre 3,40 × 1038) valori diversi. La gamma di valori interi che possono essere memorizzati in 128 bit dipende dalla rappresentazione intera utilizzata. Con le due rappresentazioni più comuni, la gamma è da 0 a 340.282.366.920.938.463.463.374.607.431.768.211.455 (2128 – 1) per la rappresentazione come numero binario (senza segno), e -170,141,183,460,469,231,731,687,303,715,884,105,728 (-2127) attraverso 170,141,183,460,469,231,731,687,303,715,884,105,727 (2127 – 1) per la rappresentazione come complemento a due.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *