Return to Bits ( 1024, 512, 256, 128, 64, 48, 32, 16, 8, 4,), Bytes, Hardware Architectures, CPUs, Hardware, Hardware Bibliography, Hardware Courses, Hardware Glossary, Hardware Topics, Awesome Hardware
In computer architecture, 128-bit integers, memory addresses, or other data units are those that are 128 bits (16 octets) wide. Also, 128-bit central processing unit (CPU) and arithmetic logic unit (ALU) architectures are those that are based on registers, address buses, or data buses of that size.
General home computing and gaming utility emerged at 8-bit word sizes, as 28=256 words, a natural unit of data, became possible. Early 8-bit CPUs (such as the Zilog Z80 and MOS Technology 6502, used in the in the 1977 PET, TRS-80, and Apple II) inaugurated the era of personal computing. Many 16-bit CPUs already existed in the mid-1970s. Over the next 30 years, the shift to 16-bit, 32-bit and 64-bit computing allowed, respectively, 216 = 65,536 unique words, 232 = 4,294,967,296 unique words and 264 = 18,446,744,073,709,551,616 unique words, each step offering a meaningful advantage until 64 bits was reached. Further advantages evaporate from 64-bit to 128-bit computing as the number of possible values in a register increases from roughly 18 quintillion (1.8×1019) to 340 undecillion (3.4×1038) as so many unique values are never utilized. Thus, with a register that can store 2128 values, no advantages over 64-bit computing accrue to either home computing or gaming. CPUs with a larger word size also require more circuitry, are physically larger, require more power and generate more heat. Thus, there are currently no mainstream general-purpose processors built to operate on 128-bit integers or addresses, although a number of processors do have specialized ways to operate on 128-bit chunks of data, and are given in § History.
While there are currently no mainstream general-purpose processors built to operate on 128-bit integers or 128-bit addresses, a number of processors do have specialized ways to operate on 128-bit chunks of data.
128-bit processors could be used for addressing directly up to 2128 (over 3.40×1038 bytes, which would greatly exceed the total data captured, created, or replicated on Earth as of 2018, which has been estimated to be around 33 zettabytes (over 274 bytes).1)
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.
Quadruple precision (128-bit) floating-point numbers can store 113-bit fixed-point numbers or integers accurately without losing precision (thus 64-bit integers in particular). Quadruple precision floats can also represent any position in the observable universe with at least micrometer precision.
Decimal128 floating-point numbers can represent numbers with up to 34 significant digits.
A 128-bit multicomparator was described by researchers in 1976.<ref>
</ref>
The IBM System/360 Model 85,<ref>
</ref> and IBM System/370 and its successors, support 128-bit floating-point arithmetic.
The Siemens 7.700 and 7.500 series mainframes and their successors support 128-bit floating-point arithmetic.<ref>
</ref>
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 vector 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.
A CPU with 128-bit multimedia extensions was designed by researchers in 1999.<ref>
</ref>
The Dreamcast and the PlayStation 2 among the Sixth generation of video game consoles used the term “128-bit” in their marketing to describe their capability. The Playstation 2's CPU had 128-bit SIMD capabilities.<ref name=“CAAQA”>John L. Hennessy and David A. Patterson. “Computer Architecture: A Quantitative Approach, Third Edition”.
</ref><ref name=“MPR”>Keith Diefendorff. “Sony's Emotionally Charged Chip”. Microprocessor Report, Volume 13, Number 5, April 19, 1999. Microdesign Resources.</ref> Neither console supported 128-bit addressing or 128-bit integer arithmetic.
The RISC-V ISA specification from 2016 includes a reservation for a 128-bit version of the architecture, but the details remain undefined intentionally, because there is yet so little practical experience with such large memory systems.<ref name=“isa”>
</ref>
Graphics processing unit (GPU) chips commonly move data across a 128-bit bus.<ref>
</ref>
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.<ref>
</ref> GCC and compatible compilers signal the presence of 128-bit arithmetic when the macro
__SIZEOF_INT128__
is defined.<ref>
</ref> For the C programming language, 128-bit support is optional, e.g. via the
int128_t
type, or it can be implemented by a compiler-specific extension. The Rust programming language has built-in support for 128-bit integers (originally via LLVM), which is implemented on all platforms.<ref>
</ref> A 128-bit type provided by a C compiler can be available in Perl via the
Math::Int128
module.<ref>
</ref>
</ref><ref>
</ref>