En arquitectura informática , los números enteros de 128 bits , las direcciones de memoria u otras unidades de datos son aquellas que tienen 128 bits (16 octetos ) de ancho. Asimismo, las arquitecturas de unidad central de procesamiento (CPU) y unidad aritmética lógica (ALU) de 128 bits son aquellas que se basan en registros , buses de direcciones o buses de datos de ese tamaño.
La informática doméstica general y los juegos de utilidad surgieron con tamaños de palabra de 8 bits, ya que 2 8 = 256 palabras , una unidad natural de datos, se hizo posible. Las primeras CPU de 8 bits (como Zilog Z80 y MOS Technology 6502 , utilizadas en el PET de 1977 , TRS-80 y Apple II ) inauguraron la era de la informática personal. Muchas CPU de 16 bits ya existían a mediados de la década de 1970. Durante los siguientes 30 años, el cambio a la informática de 16 bits, 32 bits y 64 bits permitió, respectivamente, 2 16 = 65.536 palabras únicas, 2 32 = 4.294.967.296 palabras únicas y 2 64 = 18.446.744.073.709.551.616 palabras únicas, cada paso ofreciendo una ventaja significativa hasta que se alcanzó los 64 bits. Otras ventajas desaparecen de la computación de 64 bits a la de 128 bits a medida que el número de valores posibles en un registro aumenta de aproximadamente 18 quintillones (1,8 × 10 19 ) a 340 undecillones (3,4 × 10 38 ) ya que muchos valores únicos nunca se utilizan. Por lo tanto, con un registro que puede almacenar 2 128 valores, no se obtienen ventajas sobre la computación de 64 bits ni para la computación doméstica ni para los juegos. Las CPU con un tamaño de palabra más grande también requieren más circuitos, son físicamente más grandes, requieren más energía y generan más calor. Por lo tanto, actualmente no hay procesadores de propósito general convencionales diseñados para operar con números enteros o direcciones de 128 bits , aunque varios procesadores tienen formas especializadas de operar con fragmentos de datos de 128 bits y se detallan en § Historia.
Un procesador con direccionamiento de bytes de 128 bits podría direccionar directamente hasta 2 128 (más de3,40 × 10 38 ) bytes, lo que superaría en gran medida el total de datos capturados, creados o replicados en la Tierra hasta 2018, que se ha estimado en alrededor de 33 zettabytes (más de 2,74 bytes ). [1]
Un registro de 128 bits puede almacenar 2 128 (3,40 × 10 38 ) valores diferentes. El rango de valores enteros que se pueden almacenar en 128 bits depende de la representación entera utilizada. Con las dos representaciones más comunes, el rango es de 0 a 340, 282, 366, 920, 938, 463, 463, 374, 607, 431, 768, 211, 455 (2 128 − 1) para la representación como un número binario ( sin signo ) , y de −170, 141, 183, 460, 469, 231, 731, 687, 303, 715, 884, 105, 728 (−2 127 ) a 170,141,183,460,469,231,731,687,303,715,884,105,727 (2 127 − 1) para representación como complemento a dos .
Los números de punto flotante de precisión cuádruple (128 bits) pueden almacenar números de punto fijo o enteros de 113 bits con precisión sin perder precisión (en particular, los enteros de 64 bits). Los números de punto flotante de precisión cuádruple también pueden representar cualquier posición en el universo observable con una precisión de al menos un micrómetro. [ cita requerida ]
Los números de punto flotante Decimal128 pueden representar números con hasta 34 dígitos significativos.
En 1976, los investigadores describieron un multicomparador de 128 bits. [2]
El IBM System/360 Modelo 85 , [3] y el IBM System/370 y sus sucesores admiten aritmética de punto flotante de 128 bits.
Los mainframes de las series 7.700 y 7.500 de Siemens y sus sucesores admiten aritmética de punto flotante de 128 bits. [4]
La mayoría de las CPU modernas cuentan con conjuntos de instrucciones SIMD ( Streaming SIMD Extensions , AltiVec , etc.) en los que se utilizan registros vectoriales de 128 bits para almacenar varios números más pequeños, como cuatro números de punto flotante de 32 bits. Una sola instrucción puede entonces operar sobre todos estos valores en paralelo. Sin embargo, estos procesadores no operan sobre números individuales que tengan una longitud de 128 dígitos binarios; solo sus registros vectoriales tienen el tamaño de 128 bits.
El DEC VAX admitía operaciones con tipos de datos enteros de 128 bits ('O' u octaword) y de punto flotante de 128 bits ('H-float' o HFLOAT). La compatibilidad con dichas operaciones era una opción de actualización en lugar de ser una característica estándar. Dado que los registros del VAX tenían 32 bits de ancho, una operación de 128 bits utilizaba cuatro registros consecutivos o cuatro palabras largas en la memoria.
La serie ICL 2900 proporcionaba un acumulador de 128 bits y su conjunto de instrucciones incluía aritmética decimal empaquetada y de punto flotante de 128 bits .
En 1999, unos investigadores diseñaron una CPU con extensiones multimedia de 128 bits. [5]
Entre las consolas de videojuegos de sexta generación , Dreamcast y PlayStation 2 utilizaron el término 128 bits en su marketing para describir su capacidad. La CPU de PlayStation 2 tenía capacidades SIMD de 128 bits. [6] [7] Ninguna de las consolas admitía direccionamiento de 128 bits ni aritmética de enteros de 128 bits.
La especificación RISC-V ISA de 2016 incluye una reserva para una versión de 128 bits de la arquitectura, pero los detalles permanecen indefinidos intencionalmente, porque todavía hay muy poca experiencia práctica con un tamaño de palabra tan grande. [8]
De la misma manera que los compiladores emulan, por ejemplo, la aritmética de enteros de 64 bits en arquitecturas con tamaños de registro inferiores a 64 bits, algunos compiladores también admiten la aritmética de enteros de 128 bits. Por ejemplo, el compilador GCC C 4.6 y posteriores tiene un tipo de entero de 128 bits __int128
para algunas arquitecturas. [9] Los compiladores GCC y compatibles señalan la presencia de aritmética de 128 bits cuando __SIZEOF_INT128__
se define la macro. [10] Para el lenguaje de programación C , el soporte de 128 bits es opcional, por ejemplo, a través del int128_t
tipo, o puede implementarse mediante una extensión específica del compilador. El lenguaje de programación Rust tiene soporte integrado para enteros de 128 bits (originalmente a través de LLVM ), que se implementa en todas las plataformas. [11] Un tipo de 128 bits proporcionado por un compilador de C puede estar disponible en Perl a través del Math::Int128
módulo. [12]