En la arquitectura de la computadora , los enteros de 128 bits , las direcciones de memoria u otras unidades de datos son aquellos que tienen 128 bits (16 octetos ) de ancho. Además, las arquitecturas de CPU y ALU de 128 bits son aquellas que se basan en registros , buses de direcciones o buses de datos de ese tamaño.
Si bien actualmente no hay procesadores convencionales de propósito general diseñados para operar con números enteros o direcciones de 128 bits , varios procesadores tienen formas especializadas de operar con fragmentos de datos de 128 bits. El IBM System / 370 podría considerarse la primera computadora simple de 128 bits, ya que utiliza registros de coma flotante de 128 bits . La mayoría de las CPU modernas cuentan con conjuntos de instrucciones de datos múltiples de instrucción única (SIMD) ( Streaming SIMD Extensions , AltiVecetc.) donde se utilizan registros vectoriales de 128 bits para almacenar varios números más pequeños, como cuatro números de coma flotante de 32 bits. Entonces, una sola instrucción puede operar en todos estos valores en paralelo. Sin embargo, estos procesadores no funcionan con números individuales de 128 dígitos binarios de longitud; solo sus registros tienen un tamaño de 128 bits.
El DEC VAX admitía operaciones en tipos de datos enteros de 128 bits ('O' u octapalabra) y de punto flotante de 128 bits ('H-float' o HFLOAT). El soporte para tales 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 usaba cuatro registros consecutivos o cuatro palabras largas en la memoria.
La serie ICL 2900 proporcionó un acumulador de 128 bits y su conjunto de instrucciones incluía aritmética decimal empaquetada y de coma flotante de 128 bits .
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 de GCC C 4.6 y posterior tiene un tipo entero de 128 bits __int128
para algunas arquitecturas. [1] GCC y compiladores compatibles señalan la presencia de aritmética de 128 bits cuando __SIZEOF_INT128__
se define la macro . [2] 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, que se implementa en todas las plataformas. [3] Un tipo de 128 bits proporcionado por un compilador de C puede estar disponible en Perl a través del Math::Int128
módulo. [4]
Un registro de 128 bits puede almacenar 2 128 (más de 3,40 × 10 38 ) valores diferentes. El rango de valores enteros que se pueden almacenar en 128 bits depende de la representación de enteros utilizada. Con los dos más comunes las representaciones, 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 una ( sin signo ) número binario , y -170,141,183,460,469,231,731,687,303,715,884,105,728 (-2 127 ) a través de 170,141,183,460,469,231,731,687,303,715,884,105,727 (2 127 - 1) para la representación como complemento a dos .
Usos
- El software libre utilizado para implementar la arquitectura RISC-V está definido para 32, 64 y 128 bits de ancho de datos enteros.
- Los identificadores únicos universales (UUID) constan de un valor de 128 bits.
- IPv6 enruta el tráfico de la red informática entre un rango de direcciones de 128 bits.
- ZFS es un sistema de archivos de 128 bits.
- Los chips de la unidad de procesamiento de gráficos (GPU) comúnmente mueven datos a través de un bus de 128 bits. [5]
- 128 bits es un tamaño de clave común para cifrados simétricos y un tamaño de bloque común para cifrados de bloque en criptografía .
- Los procesadores de 128 bits se pueden utilizar para direccionar directamente hasta 2128 (más3,40 × 10 38 ) bytes, lo que superaría en gran medida el total de datos almacenados en la Tierra en 2010, que se ha estimado en alrededor de 1,2 zettabytes (más de 2 70 bytes). [6]
- Los números de coma flotante de precisión cuádruple (128 bits) pueden almacenar números enteros o números de coma fija de 113 bits con precisión sin perder precisión (por lo tanto, enteros de 64 bits en particular). Los flotadores de precisión cuádruple también pueden representar cualquier posición en el universo observable con al menos una precisión micrométrica. [ cita requerida ]
- Los números de coma flotante Decimal128 pueden representar números con hasta 34 dígitos significativos.
- El conjunto de instrucciones virtuales de IBM i define todos los punteros como de 128 bits. Esto se traduce al conjunto de instrucciones reales del hardware según sea necesario, lo que permite que el hardware subyacente cambie sin necesidad de volver a compilar el software. El hardware anterior era CISC de 48 bits , mientras que el hardware actual es PowerPC de 64 bits . Debido a que los punteros se definen como de 128 bits, el hardware futuro puede ser de 128 bits sin incompatibilidad de software.
- El aumento del tamaño de la palabra puede acelerar múltiples precisión bibliotecas matemáticas, con aplicaciones a la criptografía , y potencialmente acelerar los algoritmos utilizados en el procesamiento complejo de matemático ( análisis numérico , procesamiento de señales , complejo de edición de fotos y de audio y procesamiento de vídeo ).
- MD5 es una función hash que produce un valor hash de 128 bits.
- Apache Avro utiliza un número aleatorio de 128 bits como marcador de sincronización para la división eficiente de archivos de datos. [7] [8]
Historia
Un multicomparador de 128 bits fue descrito por investigadores en 1976. [9]
En 1999, los investigadores diseñaron una CPU con extensiones multimedia de 128 bits [10].
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 sin definir intencionalmente, porque todavía hay muy poca experiencia práctica con sistemas de memoria tan grandes. [11]
Referencias
- ^ "GCC 4.6 Release Series - Cambios, nuevas funciones y correcciones" . Consultado el 25 de julio de 2016 .
- ^ Marc Glisse (26 de agosto de 2015). "Entero de 128 bits - ¿documentación sin sentido?" . Ayuda de GCC . Consultado el 23 de enero de 2020 .
- ^ "i128 - Óxido" . doc.rust-lang.org . Consultado el 25 de junio de 2020 .
- ^ "Matemáticas :: Int128" . metacpan.org . Consultado el 25 de junio de 2020 .
- ^ Woligroski, Don (24 de julio de 2006). "El procesador de gráficos" . Hardware de Tom . Archivado desde el original el 11 de abril de 2013 . Consultado el 24 de febrero de 2013 .
- ^ Miller, Rich (4 de mayo de 2010). "El universo digital se acerca a un Zettabyte" . Conocimiento del centro de datos . Archivado desde el original el 6 de mayo de 2010 . Consultado el 16 de septiembre de 2010 .
- ^ Kleppmann, Martin (24 de enero de 2013). "Re: Marcadores de sincronización" . Archivado desde el original el 27 de septiembre de 2015.
- ^ "Especificación de Apache Avro 1.8.0" . Fundación de software Apache .
- ^ Mead, Carver A .; Pashley, Richard D .; Britton, Lee D .; Daimon, Yoshiaki T .; Sando, Stewart F., Jr. (octubre de 1976). "Multicomparador de 128 bits" (PDF) . Revista IEEE de circuitos de estado sólido . 11 (5): 692–695. Código bibliográfico : 1976IJSSC..11..692M . doi : 10.1109 / JSSC.1976.1050799 . Archivado (PDF) desde el original el 3 de noviembre de 2018.
- ^ Suzuoki, M .; Kutaragi, K .; Hiroi, T .; Magoshi, H .; Okamoto, S .; OK soy.; Ohba, A .; Yamamoto, Y .; Furuhashi, M .; Tanaka, M .; Yutaka, T .; Okada, T .; Nagamatsu, M .; Urakawa, Y .; Funyu, M .; Kunimatsu, A .; Goto, H .; Hashimoto, K .; Ide, N .; Murakami, H .; Ohtaguro, Y .; Aono, A. (noviembre de 1999). "Un microprocesador con una CPU de 128 bits, diez MAC de coma flotante, cuatro divisores de coma flotante y un decodificador MPEG-2". Revista IEEE de circuitos de estado sólido . 34 (11): 1608-1618. Código Bibliográfico : 1999IJSSC..34.1608S . doi : 10.1109 / 4.799870 .
- ^ Waterman, Andrew; Asanović, Krste . "Manual del conjunto de instrucciones de RISC-V, volumen I: versión 2.2 de ISA de nivel de usuario básico" . Universidad de California, Berkeley. EECS-2016-118 . Consultado el 25 de mayo de 2017 .