В архитектуре компьютера 128-битные целые числа , адреса памяти или другие единицы данных — это те, которые имеют ширину 128 бит (16 октетов ). Кроме того, 128-битные архитектуры центрального процессора (ЦП) и арифметико-логического устройства (АЛУ) — это те, которые основаны на регистрах , адресных шинах или шинах данных такого размера.
Общие домашние вычисления и игровые утилиты появились при 8-битных размерах слов, поскольку 2 8 =256 слов , естественная единица данных, стала возможной. Ранние 8-битные процессоры (такие как Zilog Z80 и MOS Technology 6502 , использовавшиеся в 1977 году в PET , TRS-80 и Apple II ) открыли эру персональных компьютеров. Многие 16-битные процессоры уже существовали в середине 1970-х годов. В течение следующих 30 лет переход к 16-битным, 32-битным и 64-битным вычислениям позволил, соответственно, 2 16 = 65 536 уникальных слов, 2 32 = 4 294 967 296 уникальных слов и 2 64 = 18 446 744 073 709 551 616 уникальных слов, каждый шаг предлагал значимое преимущество, пока не было достигнуто 64 бита. Дальнейшие преимущества испаряются от 64-битных к 128-битным вычислениям, поскольку число возможных значений в регистре увеличивается примерно с 18 квинтиллионов (1,8 × 10 19 ) до 340 ундециллионов (3,4 × 10 38 ), поскольку так много уникальных значений никогда не используются. Таким образом, с регистром, который может хранить 2 128 значений, никаких преимуществ перед 64-битными вычислениями не возникает ни в домашних вычислениях, ни в играх. Процессоры с большим размером слова также требуют больше схем, они физически больше, потребляют больше энергии и выделяют больше тепла. Таким образом, в настоящее время нет основных процессоров общего назначения, созданных для работы со 128-битными целыми числами или адресами, хотя ряд процессоров имеют специализированные способы работы со 128-битными фрагментами данных и приведены в § История.
Процессор с 128-битной байтовой адресацией мог напрямую адресовать до 2 128 (более3,40 × 1038 ) байт, что значительно превысит общий объем данных, полученных, созданных или воспроизведенных на Земле по состоянию на 2018 год, который оценивается примерно в 33 зеттабайта ( более 2,74 байта ). [1]
128-битный регистр может хранить 2 128 (более 3,40 × 10 38 ) различных значений. Диапазон целочисленных значений, которые могут храниться в 128 битах, зависит от используемого целочисленного представления . В двух наиболее распространенных представлениях диапазон составляет от 0 до 340 282 366 920 938 463 463 374 607 431 768 211 455 (2 128 − 1) для представления в виде ( беззнакового ) двоичного числа и от −170 141 183 460 469 231 731 687 303 715 884 105 728 (−2 127 ) до 170,141,183,460,469,231,731,687,303,715,884,105,727 (2 127 − 1) для представления в виде дополнения до двух .
Числа с плавающей точкой четверной точности (128 бит) могут хранить 113-битные числа с фиксированной точкой или целые числа без потери точности (в частности, 64-битные целые числа). Числа с плавающей точкой четверной точности также могут представлять любую позицию в наблюдаемой вселенной с точностью не менее микрометра. [ необходима цитата ]
Числа с плавающей точкой Decimal128 могут представлять числа, содержащие до 34 значащих цифр.
128-битный мультикомпаратор был описан исследователями в 1976 году. [2]
IBM System/360 Model 85 [ 3] и IBM System/370 и их последователи поддерживают 128-битную арифметику с плавающей точкой.
Мейнфреймы серий Siemens 7.700 и 7.500 и их последователи поддерживают 128-битную арифметику с плавающей точкой. [4]
Большинство современных ЦП имеют наборы инструкций SIMD ( Streaming SIMD Extensions , AltiVec и т. д.), где 128-битные векторные регистры используются для хранения нескольких меньших чисел, таких как четыре 32-битных числа с плавающей точкой. Затем одна инструкция может работать со всеми этими значениями параллельно. Однако эти процессоры не работают с отдельными числами длиной 128 двоичных цифр; только их векторные регистры имеют размер 128 бит.
DEC VAX поддерживал операции с 128-битными целыми ('O' или octaword) и 128-битными типами данных с плавающей точкой ('H-float' или HFLOAT). Поддержка таких операций была опцией обновления, а не стандартной функцией. Поскольку регистры VAX имели ширину 32 бита, 128-битная операция использовала четыре последовательных регистра или четыре длинных слова в памяти.
Серия ICL 2900 имела 128-битный аккумулятор, а ее набор инструкций включал 128-битную арифметику с плавающей точкой и упакованную десятичную арифметику.
В 1999 году исследователи разработали процессор с 128-битными мультимедийными расширениями. [5]
Среди шестого поколения игровых консолей Dreamcast и PlayStation 2 использовали термин 128-бит в своем маркетинге для описания своих возможностей. Процессор Playstation 2 имел 128-битные возможности SIMD. [6] [7] Ни одна из консолей не поддерживала 128-битную адресацию или 128-битную целочисленную арифметику.
Спецификация RISC-V ISA от 2016 года включает резервирование для 128-битной версии архитектуры, но детали намеренно остаются неопределенными, поскольку пока еще слишком мало практического опыта работы с такими большими размерами слов. [8]
Точно так же, как компиляторы эмулируют, например, 64-битную целочисленную арифметику на архитектурах с размером регистра менее 64 бит, некоторые компиляторы также поддерживают 128-битную целочисленную арифметику. Например, компилятор GCC C 4.6 и более поздние версии имеют 128-битный целочисленный тип __int128
для некоторых архитектур. [9] GCC и совместимые компиляторы сигнализируют о наличии 128-битной арифметики, когда __SIZEOF_INT128__
определяется макрос. [10] Для языка программирования C поддержка 128-битной арифметики является необязательной, например, через int128_t
тип, или она может быть реализована с помощью расширения, специфичного для компилятора. Язык программирования Rust имеет встроенную поддержку 128-битных целых чисел (первоначально через LLVM ), которая реализована на всех платформах. [11] 128-битный тип, предоставляемый компилятором C, может быть доступен в Perl через Math::Int128
модуль. [12]