Вариант чисел с плавающей точкой в компьютерах
Unums ( универсальные числа [1] ) — это семейство числовых форматов и арифметики для реализации действительных чисел на компьютере, предложенное Джоном Л. Густафсоном в 2015 году . [2] Они разработаны как альтернатива повсеместному стандарту с плавающей точкой IEEE 754. Последняя версия известна как posit . [3]
Тип I Unum
Первая версия unums, официально известная как Type I unum, была представлена в книге Густафсона «Конец ошибок» как надмножество формата с плавающей точкой IEEE-754. [2] Определяющими особенностями формата Type I unum являются:
- формат хранения переменной ширины как для мантиссы , так и для экспоненты , и
- u -бит , который определяет, соответствует ли unum точному числу ( u = 0) или интервалу между последовательными точными unum ( u = 1). Таким образом, 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 бит, представляющий беззнаковое целое число s
- режим: не менее 2 бит и до ( n − 1), представляющий беззнаковое целое число r, как описано ниже
- экспонента : до 2 бит, доступных после режима, представляющих беззнаковое целое число e
- дробь : все оставшиеся биты, доступные после экспоненты, представляющие неотрицательное вещественное двоичное рациональное число f меньше 1
Поле режима использует унарное кодирование k одинаковых битов, за которыми следует бит противоположного значения, если доступны какие-либо оставшиеся биты, для представления беззнакового целого числа r , которое равно − k, если первый бит равен 0, или k − 1, если первый бит равен 1. Поля знака, экспоненты и дроби аналогичны полям знака, экспоненты и мантиссы IEEE 754 (соответственно), за исключением того, что поля положительной экспоненты и дроби могут отсутствовать или быть усеченными и неявно расширенными нулями — отсутствующая экспонента рассматривается как 00
2 (представляющая 0), однобитовая экспонента E 1 рассматривается как 2 (представляющая целое число 0, если E 1 равно 0, или 2, если E 1 равно 1), а отсутствующая дробь рассматривается как 0.E10
Две кодировки, в которых все незнаковые биты равны 0, имеют специальные интерпретации:
- Если знаковый бит равен 1, то положительное значение равно
NaR
(«недействительное»). - Если знаковый бит равен 0, положительное значение равно 0 (что является беззнаковым и единственным значением, для которого функция
sign
возвращает 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. В настоящее время поддерживает
- Добавлять
- Вычитать
- Умножить
- Разделять
- Сплавлено-умножить-сложить
- Слитое скалярное произведение (с печатным листом)
- Квадратный корень
- Преобразовать posit в знаковое и беззнаковое целое число
- Преобразовать знаковое и беззнаковое целое число в положительное
- Преобразовать posit в другой размер posit
- Меньше, равно, сравнение меньше, чем равно
- Округлить до ближайшего целого числа
Вспомогательные функции
- преобразовать double в posit
- преобразовать posit в double
- привести беззнаковое целое число к posit
Он работает для 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]
- Описание unums обходит стороной использование исчисления для решения физических задач.
- Unums может быть затратным с точки зрения времени и энергопотребления.
- Каждое вычисление в пространстве unum, скорее всего, изменит длину бита структуры. Это требует либо распаковки их в пространство фиксированного размера, либо выделения данных, освобождения и сборки мусора во время операций unum, аналогично проблемам работы с записями переменной длины в массовом хранилище.
- Unums обеспечивает только два вида числовых исключений: тихое и сигнализирующее NaN (Not-a-Number).
- Вычисление Unum может привести к слишком свободным границам из-за выбора алгебраически корректного, но численно нестабильного алгоритма.
- Преимущества unum по сравнению с числами с плавающей точкой малой точности для задач, требующих низкой точности, не очевидны.
- Решение дифференциальных уравнений и вычисление интегралов с помощью unums гарантирует правильные ответы, но может быть не таким быстрым, как методы, которые работают обычно.
Смотрите также
Ссылки
- ^ Tichy, Walter F. (апрель 2016 г.). «Конец (числовой) ошибки: интервью с Джоном Л. Густафсоном». Ubiquity – Information Everywhere . 2016 (апрель). Association for Computing Machinery (ACM): 1–14. doi : 10.1145/2913029 .
JG: Слово «unum» является сокращением от «универсальное число», так же как слово «bit» является сокращением от «двоичная цифра».
- ^ 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]
- ^ 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 .
- ^ "Программа: Специальная сессия: Великие дебаты: Джон Густафсон и Уильям Кахан". Arith23 : 23-й симпозиум IEEE по компьютерной арифметике . Кремниевая долина, США. 12 июля 2016 г. Архивировано из оригинала 30 мая 2016 г. Получено 30 мая 2016 г.
- ^ Густафсон, Джон Л .; Кахан, Уильям М. (2016-07-12). Великий спор @ARITH23: Джон Густафсон и Уильям Кахан (1:34:41) (видео) . Получено 2016-07-20 .
- ^ 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]
- ^ Густафсон, Джон Л. (2016-07-12). ""Великий спор": позиция по арифметике Unum" (PDF) . Санта-Клара, Калифорния, США: Симпозиум IEEE по компьютерной арифметике , ARITH 23. Получено 20 июля 2016 г.[4]
- ^ Tichy, Walter F. (сентябрь 2016 г.). «Unums 2.0: интервью с Джоном Л. Густафсоном». Ubiquity.ACM.org . Получено 30.01.2017 .
Сначала я назвал их «unums 2.0», что показалось мне столь же хорошим названием для концепции, как и любое другое, но на самом деле это не столько «последний релиз», сколько альтернатива.
- ^ ab Posit Working Group (2022-03-02). "Standard for Posit Arithmetic (2022)" (PDF) . Архивировано (PDF) из оригинала 2022-09-26 . Получено 2022-12-21 .
- ^ Джон Л. Густафсон и И. Ёнемото. (Февраль 2017) За пределами плавающей точки: компьютерная арифметика следующего поколения. [Онлайн]. Доступно: https://www.youtube.com/watch?v=aP0Y1uAA-2Y
- ^ Густафсон, Джон Лерой (2017-10-10). "Posit Arithmetic" (PDF) . Архивировано (PDF) из оригинала 2017-11-05 . Получено 2017-11-04 .
- ^ Фельдман, Майкл (2019-07-08). «Новый подход может потопить вычисления с плавающей точкой». www.nextplatform.com . Получено 2019-07-09 .
- ^ Бирн, Майкл (24.04.2016). «Новый числовой формат для компьютеров может навсегда уничтожить ошибки аппроксимации». Vice . Получено 09.07.2019 .
- ^ ab Линдстром, Питер; Ллойд, Скотт; Хиттингер, Джеффри (март 2018 г.). Универсальное кодирование вещественных чисел: альтернативы IEEE Floating Point . Конференция по арифметике следующего поколения. Статья 5. ACM. doi : 10.1145/3190339.3190344.
- ^ Дэвид Малласен; Альберто А. Дель Баррио; Мануэль Прието-Матиас (2024). «Big-PERCIVAL: Исследование собственного использования 64-битной положительной арифметики в научных вычислениях». IEEE Transactions on Computers . 73 (6): 1472–1485. arXiv : 2305.06946 . doi : 10.1109/TC.2024.3377890.
- ^ Кулиш, Ульрих В .; Миранкер, Уиллард Л. (март 1986 г.). «Арифметика цифрового компьютера: новый подход». SIAM Rev. 28 (1). SIAM : 1–40. doi :10.1137/1028001.
- ^ С. Чунг, «Доказуемо правильная арифметика с фиксированной точкой большого целого числа». ACM, 2018.
- ^ J. Chen, Z. Al-Ars и H. Hofstee, «Модуль умножения матриц для позицонов в реконфигурируемой логике с использованием (Open)CAPI». ACM, 2018.
- ^ З. Лехоцки, А. Сабо и Б. Фаркаш, «Высокоуровневые программные реализации .NET Unum Type I и Posit с одновременной реализацией FPGA с использованием Hastlayer». ACM, 2018.
- ^ 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
- ^ Рохит Чаурасия, Джон Густафсон, Рахул Шреста, Джонатан Нойдорфер, Сангит Намбиар, Каустав Нийоги, Фархад Мерчант, Райнер Леуперс, «Аппаратный генератор параметризованной арифметической арифметики». МКГД 2018: 334-341.
- ^ Бирн, Саймон (29.03.2016). "Реализация Unums в Julia" . Получено 30.05.2016 .
- ^ "Unum арифметика в Julia: Unums.jl". GitHub . Получено 2016-05-30 .
- ^ "Реализация Unums Julia: README". GitHub . Получено 2016-05-30 .
- ^ "Типы и операции с Unum (универсальными числами): Unums". GitHub . Получено 2016-05-30 .
- ^ "jwmerrill/Pnums.jl". Github.com . Получено 2017-01-30 .
- ^ "GitHub - ityonemo/Unum2: Pivot Unums". GitHub . 2019-04-29.
- ^ Инголе, Дипак; Квасница, Михал; Де Сильва, Химеши; Густафсон, Джон Л. «Сокращение следов памяти в явном модельном предиктивном управлении с использованием универсальных чисел. Представлено на Всемирном конгрессе IFAC 2017» . Получено 15 ноября 2016 г.
- ^ Инголе, Дипак; Квасница, Михал; Де Сильва, Химеши; Густафсон, Джон Л. «Прототип MATLAB unum (munum)» . Проверено 15 ноября 2016 г.
- ^ "GitHub - stillwater-sc/Universal: Универсальная числовая арифметика". GitHub . 2019-06-16.
- ^ ab "Cerlane Leong / SoftPosit · GitLab". GitLab .
- ^ "Berkeley SoftFloat". www.jhauser.us .
Дальнейшее чтение
- Густафсон, Джон Л. (март 2013 г.). «Точность правильного размера: освобожденные вычисления: необходимость правильной точности для экономии энергии, полосы пропускания, памяти и электроэнергии» (PDF) . Архивировано (PDF) из оригинала 2016-06-06 . Получено 2016-06-06 .
- Брюкнер, Рич (2015-03-02). "Слайдкаст: Джон Густафсон объясняет энергоэффективные вычисления Unum". Отчет Rich . Внутри HPC. Архивировано из оригинала 2016-07-10 . Получено 2016-06-10 .
- Густафсон, Джон Л. (2015). "Конец числовой ошибки" (PDF) . Архивировано (PDF) из оригинала 2016-06-06 . Получено 2016-06-06 .
- Густафсон, Джон Л. (2016-06-03) [2016-02-22]. "Радикальный подход к вычислениям с действительными числами – Unums версии 2.0" (PPT). Архивировано из оригинала 2016-07-10 . Получено 2016-07-10 .(Примечание. PDF-файлы не содержат примечаний: [5] [6])
- Густафсон, Джон Л. (2016-06-06). "Энергоэффективный и массивно параллельный подход к валидным числовым данным" (PPT). Семинар OCRAR. Архивировано из оригинала 2016-07-10 . Получено 2016-07-10 .[7] [8]
- Густафсон, Джон Л. (2016). "Радикальный подход к вычислениям с действительными числами" (PDF) . SuperFri.org. Архивировано (PDF) из оригинала 2016-07-10 . Получено 2016-07-10 .
- Кулиш, Ульрих В. (2015). «Современная интервальная арифметика от закрытых интервалов до связанных множеств действительных чисел» (PDF) (препринт). Institut für Angewandte und Numerische Mathematik – Karlsruhe Institute of Technology (KIT), Германия. Идентификатор 15/02. Архивировано (PDF) из оригинала 2016-07-12 . Получено 2016-07-12 .
- Рисс, Томас (2016-03-10). "Unum – целесообразное расширение IEEE 754" (PDF) (презентация). Лондонский университет Южного берега (LSBU), Великобритания: Институт информатики и автоматизации (IIA), факультет EEE & CS, Бременский университет прикладных наук , Германия. Архивировано (PDF) из оригинала 2016-07-12 . Получено 2016-07-12 .
- Кахан, Уильям М. (2016-07-15). "Комментарии профессора В. Кахана по арифметике SORN" (PDF) . Архивировано (PDF) из оригинала 2016-08-01 . Получено 2016-08-01 .
- Hunhold, Laslo (2016-11-08). The Unum Number Format: Mathematical Foundations, Implementation and Comparison to IEEE 754 Floating-Point Numbers (PDF) (бакалаврская работа). Universität zu Köln , Mathematisches Institut. arXiv : 1701.00722v1 . Архивировано (PDF) из оригинала 2017-01-07 . Получено 2016-10-23 .
- Sterbenz, Pat H. (1974-05-01). Вычисления с плавающей точкой . Серия Prentice-Hall по автоматическим вычислениям (1-е изд.). Englewood Cliffs, Нью-Джерси, США: Prentice Hall . ISBN 0-13-322495-3.
- Кейв, Скип (2016-08-17). "Реализация на языке программирования J 3-битных, 4-битных, 8-битных и 16-битных точных чисел" . Получено 2017-05-03 .(Ссылка для скачивания Роджера Стоукса: [9])
- Инголе, Дипак (2017-09-28). Встроенная реализация явной модели предиктивного управления (кандидатская диссертация). Словацкий технологический университет в Братиславе , Словакия.
Внешние ссылки
- «Конференция по арифметике следующего поколения (CoNGA)». 2017. Архивировано из оригинала 2017-11-04 . Получено 2017-11-04 .
- "SoftPosit". 2018 . Получено 2018-06-13 .
- "Вклад сообщества в исходный код". 2018 . Получено 2018-06-13 .
- "Анатомия положительного числа". 2018-04-11 . Получено 2019-08-09 .