128-bit

From HandWiki

In computer architecture, 128-bit integers, memory addresses, or other data units are those that are 128 bits (16 octets) wide. Also, 128-bit CPU and ALU architectures are those that are based on registers, address buses, or data buses of that size. While there are currently no mainstream general-purpose processors built to operate on 128-bit integers or addresses, a number of processors do have specialized ways to operate on 128-bit chunks of data. The IBM System/370 could be considered the first simple 128-bit computer, as it used 128-bit floating-point registers. Most modern CPUs feature single-instruction multiple-data (SIMD) instruction sets (Streaming SIMD Extensions, AltiVec etc.) where 128-bit vector registers are used to store several smaller numbers, such as four 32-bit floating-point numbers. A single instruction can then operate on all these values in parallel. However, these processors do not operate on individual numbers that are 128 binary digits in length; only their registers have the size of 128 bits.

The DEC VAX supported operations on 128-bit integer ('O' or octaword) and 128-bit floating-point ('H-float' or HFLOAT) datatypes. Support for such operations was an upgrade option rather than being a standard feature. Since the VAX's registers were 32 bits wide, a 128-bit operation used four consecutive registers or four longwords in memory.

The ICL 2900 Series provided a 128-bit accumulator, and its instruction set included 128-bit floating-point and packed decimal arithmetic.

In the same way that compilers emulate e.g. 64-bit integer arithmetic on architectures with register sizes less than 64 bits, some compilers also support 128-bit integer arithmetic. For example, the GCC C compiler 4.6 and later has a 128-bit integer type __int128 for some architectures.[1] For the C programming language, this is a compiler-specific extension, as C11 itself does not guarantee support for 128-bit integers.

A 128-bit register can store 2128 (over 3.40 × 1038) different values. The range of integer values that can be stored in 128 bits depends on the integer representation used. With the two most common representations, the range is 0 through 340,282,366,920,938,463,463,374,607,431,768,211,455 (2128 − 1) for representation as an (unsigned) binary number, and −170,141,183,460,469,231,731,687,303,715,884,105,728 (−2127) through 170,141,183,460,469,231,731,687,303,715,884,105,727 (2127 − 1) for representation as two's complement.

Uses

  • The free software used to implement RISC-V architecture is defined for 32, 64 and 128 bits of integer data width.
  • Universally Unique Identifiers (UUID) consist of a 128-bit value.
  • IPv6 routes computer network traffic amongst a 128-bit range of addresses.
  • ZFS is a 128-bit file system.
  • GPU chips commonly move data across a 128-bit bus.[2]
  • 128 bits is a common key size for symmetric ciphers and a common block size for block ciphers in cryptography.
  • 128-bit processors could be used for addressing directly up to 2128 (over 3.40 × 1038) bytes, which would greatly exceed the total data stored on Earth as of 2010, which has been estimated to be around 1.2 zettabytes (1.42 × 1021 bytes).[3]
  • Quadruple precision (128-bit) floating-point numbers can store 64-bit fixed point numbers or integers accurately without losing precision.
  • The AS/400 virtual instruction set defines all pointers as 128-bit. This gets translated to the hardware's real instruction set as required, allowing the underlying hardware to change without needing to recompile the software. Past hardware was 48-bit CISC, while current hardware is 64-bit PowerPC. Because pointers are defined to be 128-bit, future hardware may be 128-bit without software incompatibility.
  • Increasing the word size can speed up multiple precision mathematical libraries. Applications include cryptography, and potentially speed up algorithms used in complex mathematical processing (numerical analysis, signal processing, complex photo editing and audio and video processing).
  • Apache Avro uses a 128-bit random number as synchronization marker for efficient splitting of data files.[4]

History

A 128-bit multicomparator was described by researchers in 1976.[5]

A CPU with 128-bit multimedia extensions was designed by researchers in 1999.[6]

References

  1. "GCC 4.6 Release Series - Changes, New Features, and Fixes". https://gcc.gnu.org/gcc-4.6/changes.html. 
  2. Don Woligroski (July 2006). The Graphics Processor. tomshardware.com. http://www.tomshardware.com/reviews/graphics-beginners,1288-8.html. Retrieved 24 February 2013. 
  3. Rich Miller (May 2010). "Digital Universe nears a Zettabyte". The Guardian (datacenterknowledge.com). http://www.datacenterknowledge.com/archives/2010/05/04/digital-universe-nears-a-zettabyte/. Retrieved 16 September 2010. 
  4. "Compression Formats and Delimiter Sequences". https://stackoverflow.com/questions/38161285/compression-formats-and-delimiter-sequences. Retrieved 20 June 2018. 
  5. Mead, C.A.; Pashley, R.D.; Britton, L.D.; Daimon, Y.T.; Sando, S.F. (1976). "128-bit multicomparator". IEEE Journal of Solid-State Circuits 11: 692. doi:10.1109/JSSC.1976.1050799. http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1050799. 
  6. Suzuoki, M.; Kutaragi, K.; Hiroi, T.; Magoshi, H.; Okamoto, S.; Oka, M.; Ohba, A.; Yamamoto, Y. et al. (1999). "A microprocessor with a 128-bit CPU, ten floating-point MAC's, four floating-point dividers, and an MPEG-2 decoder". IEEE Journal of Solid-State Circuits 34 (11): 1608. doi:10.1109/4.799870.