stringtranslate.com

Unum (формат числа)

Unums ( универсальные числа [1] ) — это семейство числовых форматов и арифметики для реализации действительных чисел на компьютере, предложенное Джоном Л. Густафсоном в 2015 году . [2] Они разработаны как альтернатива повсеместному стандарту с плавающей точкой IEEE 754. Последняя версия известна как posit . [3]

Тип I Unum

Первая версия unums, официально известная как Type I unum, была представлена ​​в книге Густафсона «Конец ошибок» как надмножество формата с плавающей точкой IEEE-754. [2] Определяющими особенностями формата Type I unum являются:

Для вычислений в этом формате Густафсон предложил использовать интервальную арифметику с парой чисел unum, которую он назвал ubound , обеспечивая гарантию того, что полученный интервал содержит точное решение.

Уильям М. Кахан и Густафсон обсуждали unums на конференции Arith23 . [4] [5] [6] [7]

Тип II Unum

Unums типа II были введены в 2016 году [8] как переработанный вариант Unums, который нарушил совместимость с IEEE-754.

Позиция (Тип III Unum)

В феврале 2017 года Густафсон официально представил unums типа III (posit) для фиксированных значений с плавающей точкой и допустимых значений для интервальной арифметики . [3] В марте 2022 года стандарт был ратифицирован и опубликован рабочей группой Posit. [9]

Posits [3] [10] [11] — это аппаратно-дружественная версия unum, в которой решены трудности, с которыми сталкивался исходный тип I unum из-за его переменного размера. По сравнению с float IEEE 754 аналогичного размера, posit предлагают больший динамический диапазон и больше дробных бит для значений с величиной около 1 (но меньше дробных бит для очень больших или очень малых значений), и Густафсон утверждает, что они обеспечивают лучшую точность. [12] [13] Исследования [14] [15] подтверждают, что для некоторых приложений posit с quire превосходят float по точности. Posit имеют превосходную точность в диапазоне около единицы, где происходит большинство вычислений. Это делает его очень привлекательным для текущей тенденции в глубоком обучении, чтобы минимизировать количество используемых бит. Это потенциально помогает любому приложению ускориться, позволяя использовать меньше бит (так как у него больше дробных бит для точности), уменьшая пропускную способность сети и памяти, а также требования к питанию.

Формат n -битного posit обозначается меткой «posit», за которой следуют десятичные цифры n (например, 16-битный формат posit — «posit16») и состоит из четырех последовательных полей:

  1. знак : 1 бит, представляющий беззнаковое целое число s
  2. режим: не менее 2 бит и до ( n  − 1), представляющий беззнаковое целое число r, как описано ниже
  3. экспонента : до 2 бит, доступных после режима, представляющих беззнаковое целое число e
  4. дробь : все оставшиеся биты, доступные после экспоненты, представляющие неотрицательное вещественное двоичное рациональное число f меньше 1

Поле режима использует унарное кодирование k одинаковых битов, за которыми следует бит противоположного значения, если доступны какие-либо оставшиеся биты, для представления беззнакового целого числа r , которое равно − k, если первый бит равен 0, или k  − 1, если первый бит равен 1. Поля знака, экспоненты и дроби аналогичны полям знака, экспоненты и мантиссы IEEE 754 (соответственно), за исключением того, что поля положительной экспоненты и дроби могут отсутствовать или быть усеченными и неявно расширенными нулями — отсутствующая экспонента рассматривается как 002 (представляющая 0), однобитовая экспонента E 1 рассматривается как 2 (представляющая целое число 0, если E 1 равно 0, или 2, если E 1 равно 1), а отсутствующая дробь рассматривается как 0.E10

Две кодировки, в которых все незнаковые биты равны 0, имеют специальные интерпретации:

В противном случае положительное значение равно , в котором r масштабируется по степеням 16, e масштабируется по степеням 2, f равномерно распределяет значения между соседними комбинациями ( r , e ), а s корректирует знак симметрично относительно 0.

Примеры

Примечание : ожидается, что 32-битного posit будет достаточно для решения практически всех классов приложений [ необходима ссылка ] .

Квайр

Для каждого типа posit n точности стандарт определяет соответствующий тип "quire" quire n точности , используемый для накопления точных сумм произведений этих posit без округления или переполнения в скалярных произведениях для векторов до 2 31 или более элементов (точный предел равен ). Формат quire представляет собой целое число со знаком в формате дополнения до двух , интерпретируемое как кратное единицам величины, за исключением специального значения с ведущим битом знака 1 и всеми остальными битами, равными 0 (что представляет ). Quire основаны на работе Ульриха В. Кулиша и Уилларда Л. Миранкера . [16]NaR

Действительный

Допустимые значения описываются как режим Unum типа III, который ограничивает результаты заданным диапазоном. [3]

Реализации

Несколько программных и аппаратных решений реализуют posit. [14] [17] [18] [19] [20] Первый полностью параметризованный аппаратный генератор арифметики posit был предложен в 2018 году. [21]

Реализации Unum были исследованы в Julia [22] [23] [24] [25] [26] [27] и MATLAB . [28] [29] Доступна версия C++ [30] с поддержкой любых размеров posit в сочетании с любым количеством битов экспоненты. Быстрая реализация на языке C, SoftPosit, [31], предоставленная исследовательской группой NGA на основе Berkeley SoftFloat, дополняет доступные программные реализации.

SoftPosit

SoftPosit [31] — программная реализация posit на основе Berkeley SoftFloat. [32] Позволяет программно сравнивать posit и float. В настоящее время поддерживает

Вспомогательные функции

Он работает для 16-битных posit с одним битом экспоненты и 8-битных posit с нулевым битом экспоненты. Поддержка 32-битных posit и гибкого типа (2-32 бита с двумя битами экспоненты) ожидает проверки. Он поддерживает системы x86_64. Он был протестирован на GNU gcc ( SUSE Linux ) 4.8.5 Apple LLVM версии 9.1.0 (clang-902.0.39.2).

Примеры

Добавить с posit8_t

#include "softposit.h" int main ( int argc , char * argv []) { posit8_t pA , pB , pZ ; pA = castP8 ( 0xF2 ); pB = castP8 ( 0x23 ); pZ = p8_add ( pA , pB );                    // Чтобы проверить ответ, преобразуя его в double double dZ = convertP8ToDouble ( pZ ); printf ( "dZ: %.15f \n " , dZ );       // Чтобы вывести результат в двоичном формате (предупреждение: непереносимый код) uint8_t uiZ = castUI8 ( pZ ); printBinary (( uint64_t * ) & uiZ , 8 );       вернуть 0 ; } 

Объединенное скалярное произведение с quire16_t

// Преобразуем double в posit posit16_t pA = convertDoubleToP16 ( 1.02783203125 ); posit16_t pB = convertDoubleToP16 ( 0.987060546875 ); posit16_t pC = convertDoubleToP16 ( 0.4998779296875 ); posit16_t pD = convertDoubleToP16 ( 0.8797607421875 );            quire16_t qZ ; // Устанавливаем quire на 0 qZ = q16_clr ( qZ );  // Накапливаем произведения без округлений qZ = q16_fdp_add ( qZ , pA , pB ); qZ = q16_fdp_add ( qZ , pC , pD );        // Преобразуем обратно в posit posit16_t pZ = q16_to_p16 ( qZ );   // Для проверки ответа double dZ = convertP16ToDouble ( pZ );   

Критика

Уильям М. Кахан, главный архитектор IEEE 754-1985, критикует unums типа I по следующим причинам (некоторые из них рассматриваются в стандартах типа II и типа III): [6] [33]

Смотрите также

Ссылки

  1. ^ Tichy, Walter F. (апрель 2016 г.). «Конец (числовой) ошибки: интервью с Джоном Л. Густафсоном». Ubiquity – Information Everywhere . 2016 (апрель). Association for Computing Machinery (ACM): 1–14. doi : 10.1145/2913029 . JG: Слово «unum» является сокращением от «универсальное число», так же как слово «bit» является сокращением от «двоичная цифра».
  2. ^ ab Gustafson, John L. (2016-02-04) [2015-02-05]. Конец ошибок: Unum Computing. Chapman & Hall / CRC Computational Science . Том 24 (2-е исправленное издание, 1-е изд.). CRC Press . ISBN 978-1-4822-3986-7. Получено 2016-05-30 .[1] [2]
  3. ^ abcd Gustafson, John Leroy ; Yonemoto, Isaac (2017). "Beating Floating Point at its Own Game: Posit Arithmetic". Supercomputing Frontiers and Innovations . 4 (2). Издательский центр Южно-Уральского государственного университета, Челябинск, Россия. doi : 10.14529/jsfi170206 . Архивировано из оригинала 2017-11-04 . Получено 2017-11-04 .
  4. ^ "Программа: Специальная сессия: Великие дебаты: Джон Густафсон и Уильям Кахан". Arith23 : 23-й симпозиум IEEE по компьютерной арифметике . Кремниевая долина, США. 12 июля 2016 г. Архивировано из оригинала 30 мая 2016 г. Получено 30 мая 2016 г.
  5. ^ Густафсон, Джон Л .; Кахан, Уильям М. (2016-07-12). Великий спор @ARITH23: Джон Густафсон и Уильям Кахан (1:34:41) (видео) . Получено 2016-07-20 .
  6. ^ ab Kahan, William M. (2016-07-16) [2016-07-12]. "Критика книги Джона Л. Густафсона THE END of ERROR — Unum Computation и его радикального подхода к вычислениям с действительными числами" (PDF) . Санта-Клара, Калифорния, США: Симпозиум IEEE по компьютерной арифметике , ARITH 23 . Архивировано (PDF) из оригинала 2016-07-25 . Получено 2016-07-25 .[3]
  7. ^ Густафсон, Джон Л. (2016-07-12). ""Великий спор": позиция по арифметике Unum" (PDF) . Санта-Клара, Калифорния, США: Симпозиум IEEE по компьютерной арифметике , ARITH 23. Получено 20 июля 2016 г.[4]
  8. ^ Tichy, Walter F. (сентябрь 2016 г.). «Unums 2.0: интервью с Джоном Л. Густафсоном». Ubiquity.ACM.org . Получено 30.01.2017 . Сначала я назвал их «unums 2.0», что показалось мне столь же хорошим названием для концепции, как и любое другое, но на самом деле это не столько «последний релиз», сколько альтернатива.
  9. ^ ab Posit Working Group (2022-03-02). "Standard for Posit Arithmetic (2022)" (PDF) . Архивировано (PDF) из оригинала 2022-09-26 . Получено 2022-12-21 .
  10. ^ Джон Л. Густафсон и И. Ёнемото. (Февраль 2017) За пределами плавающей точки: компьютерная арифметика следующего поколения. [Онлайн]. Доступно: https://www.youtube.com/watch?v=aP0Y1uAA-2Y
  11. ^ Густафсон, Джон Лерой (2017-10-10). "Posit Arithmetic" (PDF) . Архивировано (PDF) из оригинала 2017-11-05 . Получено 2017-11-04 .
  12. ^ Фельдман, Майкл (2019-07-08). «Новый подход может потопить вычисления с плавающей точкой». www.nextplatform.com . Получено 2019-07-09 .
  13. ^ Бирн, Майкл (24.04.2016). «Новый числовой формат для компьютеров может навсегда уничтожить ошибки аппроксимации». Vice . Получено 09.07.2019 .
  14. ^ ab Линдстром, Питер; Ллойд, Скотт; Хиттингер, Джеффри (март 2018 г.). Универсальное кодирование вещественных чисел: альтернативы IEEE Floating Point . Конференция по арифметике следующего поколения. Статья 5. ACM. doi : 10.1145/3190339.3190344.
  15. ^ Дэвид Малласен; Альберто А. Дель Баррио; Мануэль Прието-Матиас (2024). «Big-PERCIVAL: Исследование собственного использования 64-битной положительной арифметики в научных вычислениях». IEEE Transactions on Computers . 73 (6): 1472–1485. arXiv : 2305.06946 . doi : 10.1109/TC.2024.3377890.
  16. ^ Кулиш, Ульрих В .; Миранкер, Уиллард Л. (март 1986 г.). «Арифметика цифрового компьютера: новый подход». SIAM Rev. 28 (1). SIAM : 1–40. doi :10.1137/1028001.
  17. ^ С. Чунг, «Доказуемо правильная арифметика с фиксированной точкой большого целого числа». ACM, 2018.
  18. ^ J. Chen, Z. Al-Ars и H. Hofstee, «Модуль умножения матриц для позицонов в реконфигурируемой логике с использованием (Open)CAPI». ACM, 2018.
  19. ^ З. Лехоцки, А. Сабо и Б. Фаркаш, «Высокоуровневые программные реализации .NET Unum Type I и Posit с одновременной реализацией FPGA с использованием Hastlayer». ACM, 2018.
  20. ^ S. Langroudi, T. Pandit и D. Kudithipudi, «Глубокий вывод об обучении на встраиваемых устройствах: фиксированная точка против положительной точки». В Energy Efficiency Machine Learning and Cognitive Computing for Embedded Applications (EMC), 2018. [Онлайн]. Доступно: https://sites.google.com/view/asplos-emc2/program
  21. ^ Рохит Чаурасия, Джон Густафсон, Рахул Шреста, Джонатан Нойдорфер, Сангит Намбиар, Каустав Нийоги, Фархад Мерчант, Райнер Леуперс, «Аппаратный генератор параметризованной арифметической арифметики». МКГД 2018: 334-341.
  22. ^ Бирн, Саймон (29.03.2016). "Реализация Unums в Julia" . Получено 30.05.2016 .
  23. ^ "Unum арифметика в Julia: Unums.jl". GitHub . Получено 2016-05-30 .
  24. ^ "Реализация Unums Julia: README". GitHub . Получено 2016-05-30 .
  25. ^ "Типы и операции с Unum (универсальными числами): Unums". GitHub . Получено 2016-05-30 .
  26. ^ "jwmerrill/Pnums.jl". Github.com . Получено 2017-01-30 .
  27. ^ "GitHub - ityonemo/Unum2: Pivot Unums". GitHub . 2019-04-29.
  28. ^ Инголе, Дипак; Квасница, Михал; Де Сильва, Химеши; Густафсон, Джон Л. «Сокращение следов памяти в явном модельном предиктивном управлении с использованием универсальных чисел. Представлено на Всемирном конгрессе IFAC 2017» . Получено 15 ноября 2016 г.
  29. ^ Инголе, Дипак; Квасница, Михал; Де Сильва, Химеши; Густафсон, Джон Л. «Прототип MATLAB unum (munum)» . Проверено 15 ноября 2016 г.
  30. ^ "GitHub - stillwater-sc/Universal: Универсальная числовая арифметика". GitHub . 2019-06-16.
  31. ^ ab "Cerlane Leong / SoftPosit · GitLab". GitLab .
  32. ^ "Berkeley SoftFloat". www.jhauser.us .
  33. ^ Кахан, Уильям М. (15.07.2016). "Комментарий профессора В. Кахана к "КОНЦУ ОШИБКИ — Unum Computing" Джона Л. Густафсона, (2015) CRC Press" (PDF) . Архивировано (PDF) из оригинала 01.08.2016 . Получено 01.08.2016 .

Дальнейшее чтение

Внешние ссылки