Введение

Компьютерная архитектура: разрядность

Общая вычислительная и игровая функциональность для дома появилась с 8-битной разрядностью – но не с 1-битной или 4-битной – поскольку стало возможным использование 2⁸ = 256 слов, что является естественной единицей данных. Таким образом, ранние 8-битные процессоры (Zilog Z80, 6502, Intel 8088, представленные в 1976–1981 годах компаниями Commodore, Tandy Corporation, Apple и IBM) положили начало эре персональных компьютеров. Многие 16-битные процессоры уже существовали в середине 1970-х годов. В течение следующих 30 лет переход к 16-битным, 32-битным и 64-битным вычислениям позволил, соответственно, использовать 2¹⁶ = 65 536 уникальных слов, 2³² = 4 294 967 296 уникальных слов и 2⁶⁴ = 18 446 744 073 709 551 615 уникальных слов, каждый шаг предлагал ощутимое преимущество, пока не была достигнута 64-битная разрядность. Дальнейшие преимущества нивелируются при переходе от 64-битной к 128-битной вычислительной системе, поскольку количество возможных значений в регистре увеличивается примерно с 18 квинтиллионов (1,8) до 340 ундециллионов (3,40), при этом столь большое количество уникальных значений практически не используется. Таким образом, при использовании регистра, способного хранить 2¹²⁸ значений, не появляется никаких преимуществ по сравнению с 64-битной вычислительной системой ни для домашних вычислений, ни для игр. Процессоры с большей разрядностью также требуют более сложной схемы, физически больше, потребляют больше энергии и выделяют больше тепла. Поэтому в настоящее время не существует широко распространенных процессоров общего назначения, предназначенных для работы с 128-битными целыми числами или адресами, хотя ряд процессоров имеют специализированные способы обработки 128-битных блоков данных, которые приведены в .

Представительство

Процессор с 128-битным байтовым адресованием может напрямую адресовать до 2¹²⁸ (более 3,40 × 10³⁸) байтов, что значительно превышает общий объем данных, захваченных, созданных или реплицированных на Земле по состоянию на 2018 год, который оценивается примерно в 33 зеттабайта (более 274 байтов). 128-битовый регистр может хранить 2¹²⁸ (более 3,40 × 10³⁸) различных значений. Диапазон целых значений, которые могут храниться в 128 битах, зависит от используемого целочисленного представления. При двух наиболее распространенных представлениях диапазон составляет от 0 до 340 282 366 920 938 463 463 374 607 431 768 211 455 (2¹²⁸ − 1) для представления в виде (неподписанного) двоичного числа и от −170 141 183 460 469 231 731 687 303 715 884 105 728 (−2¹²⁷) до 170 141 183 460 469 231 731 687 303 715 884 105 727 (2¹²⁷ − 1) для представления в дополнительном коде. Числа с плавающей запятой с четверократной точностью (128 бит) могут хранить 113-битные числа с фиксированной запятой или целые числа точно, без потери точности (таким образом, 64-битные целые числа в частности). Числа с плавающей запятой четверократной точности также могут представлять любую позицию в наблюдаемой Вселенной с точностью не менее микрометра. Числа с плавающей запятой Decimal128 могут представлять числа с до 34 значащих цифр.

История

Мультикампаратор на 128 бит был описан исследователями в 1976 году. IBM System/360 Model 85, IBM System/370 и их преемники поддерживают 128-битную арифметику с плавающей запятой. Серии мейнфреймов Siemens 7.700 и 7.500 и их преемники поддерживают 128-битную арифметику с плавающей запятой. Большинство современных процессоров оснащены наборами инструкций SIMD (Single Instruction, Multiple Data) – 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-битными мультимедийными расширениями. Среди консолей видеоигр шестого поколения Dreamcast и PlayStation 2 использовали термин "128-битный" в своей маркетинговой кампании для описания своих возможностей. Процессор PlayStation 2 обладал 128-битными SIMD-возможностями. Ни одна из консолей не поддерживала 128-битное адресное пространство или 128-битную целочисленную арифметику. Современные графические процессоры (GPU) могут обрабатывать данные по 128-битной шине.

Оборудование

Спецификация RISC V ISA 2016 года предусматривает возможность 128-битной версии архитектуры, однако детали остаются намеренно не определенными, поскольку практического опыта работы с таким большим размером слова пока недостаточно.

Программное обеспечение

Точно так же, как компиляторы эмулируют, например, 64-битную целочисленную арифметику на архитектурах с размером регистров менее 64 бит, некоторые компиляторы также поддерживают 128-битную целочисленную арифметику. Например, компилятор GCC C версии 4.6 и более поздние имеет 128-битный целочисленный тип `int128` для некоторых архитектур. GCC и совместимые с ним компиляторы сообщают о наличии 128-битной арифметики, когда определен макрос `SIZEOF_INT128`. Для языка программирования C поддержка 128 бит является необязательной, например, через тип `int128_t`, или она может быть реализована с помощью расширения, специфичного для компилятора. Язык программирования Rust имеет встроенную поддержку 128-битных целых чисел (первоначально через LLVM), которая реализована на всех платформах. 128-битный тип, предоставляемый компилятором C, может быть доступен в Perl через модуль `Math::Int128`.

Применение

Универсально уникальные идентификаторы (UUID) состоят из 128-битного значения. IPv6 направляет компьютерный сетевой трафик в диапазоне 128-битных адресов. ZFS — это 128-битная файловая система. 128 бит — распространенный размер ключа для симметричных шифров и распространенный размер блока для блочных шифров в криптографии. Machine Interface IBM i определяет все указатели как 128-битные. Инструкции Machine Interface преобразуются в реальный набор инструкций оборудования по мере необходимости, что позволяет изменять базовое оборудование без перекомпиляции программного обеспечения. Ранее оборудование использовало набор инструкций CISC с 48-битным адресованием, а текущее оборудование — 64-битный PowerPC/Power ISA. В реализации PowerPC/Power ISA первые четыре байта содержат информацию, используемую для идентификации типа ссылаемого объекта, а последние восемь байт используются как адрес виртуальной памяти. Оставшиеся четыре байта не используются и позволят в будущем расширить приложения IBM i до 96-битного адресования без изменения кода. Увеличение размера слова может ускорить многоточные математические библиотеки, что применимо к криптографии и потенциально ускорить алгоритмы, используемые в сложной математической обработке (числовой анализ, обработка сигналов, сложная обработка фотографий, аудио и видео). MD5 — это хеш-функция, генерирующая 128-битное хеш-значение. Apache Avro использует 128-битное случайное число в качестве маркера синхронизации для эффективного разделения файлов данных.