Unum (числовой формат) - Unum (number format)
Unums ( универсальные числа ) - это семейство форматов и арифметики, аналогичное плавающей запятой , предложенное Джоном Л. Густафсоном . Они разработаны как альтернатива широко распространенному стандарту IEEE 754 для операций с плавающей запятой, и последняя версия (известная как posits ) может использоваться в качестве замены для программ, которые не зависят от конкретных функций IEEE 754.
Тип I Unum
Первая версия unums, теперь официально известная как Type I unum , была представлена в его книге «Конец ошибки» как надмножество формата с плавающей запятой IEEE-754. Двумя определяющими особенностями формата unum типа I являются:
- формат хранения переменной ширины и для мантиссы и экспоненты , и
- U-бит , который определяет , является ли UNUM соответствует точному количеству ( у = 0), или интервал между последовательным точным unums ( у = 1). Таким образом, числа покрывают всю расширенную прямую вещественных чисел [−∞, + ∞].
Для выполнения вычислений с форматом Густафсон предлагает использовать интервальную арифметику с парой единиц, которую он называет ubound , обеспечивая гарантию того, что полученный интервал содержит точное решение.
Уильям М. Кахан и Джон Л. Густафсон обсуждали unums на конференции Arith23 .
Тип II Unum
Unums типа II были представлены в конце 2016 года как полная переработка Unums, нарушившая совместимость с IEEE-754.
Тип III Unum (положительный и действительный)
В феврале 2017 года Густафсон официально представил единицы типа III, которые состоят из позиций для фиксированных значений, подобных плавающей запятой, и валидов для интервальной арифметики .
Posit
Posits - это аппаратно-дружественная версия unum, в которой устранены трудности, с которыми сталкивался исходный тип I unum из-за его переменного размера. Положения аналогичного размера по сравнению с поплавками предлагают больший динамический диапазон и больше дробных битов для точности. В независимом исследовании Линдстром, Ллойд и Хиттингер из Ливерморской национальной лаборатории Лоуренса подтвердили, что по точности эти поплавки превосходят поплавки. Положения имеют особенно высокую точность в диапазоне, близком к единице, в котором происходит большинство вычислений. Это делает его очень привлекательным для современной тенденции в глубоком обучении минимизировать количество используемых битов. Это потенциально помогает любым приложениям достичь ускорения, позволяя использовать меньшее количество битов (поскольку у него больше дробных битов для точности), тем самым уменьшая пропускную способность сети и памяти, а также требования к мощности, и приближая нас на один шаг к экзафлопности .
Позиции имеют индекс переменного размера и битовые поля мантиссы, причем разделение определяется индикатором «режима». Густафсон утверждает, что они обеспечивают лучшую точность, чем стандартные числа с плавающей запятой, при этом занимая меньше битов.
Положения имеют формат, отличный от формата чисел с плавающей запятой IEEE 754. Они состоят из четырех частей: знака, режима, показателя степени и дроби (также известной как мантисса). Для n- битной позиции режим может иметь длину от 2 до ( n - 1). Формат режима таков, что это повторение бита одного знака и завершается битом другого знака.
Пример 1:
Пример 1 | Пример 2 |
---|---|
00000000000000 1 | 111 0 |
В примере 1 показан режим с 14 битами с одинаковым знаком (бит 0), завершающимися битом с другим знаком (бит 1). Поскольку имеется 14 битов с одинаковым знаком, продолжительность режима составляет 14.
Пример 2 показывает режим с 3 битами одного знака (бит 1), завершающимися битом другого знака (бит 0). Поскольку имеется 3 бита с одинаковым знаком, продолжительность режима составляет 3.
Биты знака, экспоненты и дроби очень похожи на IEEE 754; однако позиция может опускать один или оба из битов экспоненты и дроби, оставляя позицию, которая состоит только из битов знака и режима. В примере 3 показана максимально возможная длина выполнения режима для 16-битного положения, где бит завершения режима, бит экспоненты и биты дроби превышают длину размера позиции. Пример 4 иллюстрирует наименьшую возможную длину выполнения 1 для 16-битной позиции с одним битом экспоненты (битовое значение = 1) и 12 дробными битами (битовое значение = 100000000001).
Пример 3: Продолжительность режима = 15 | Пример 4: Продолжительность режима = 1 |
---|---|
0 111111111111111 | 0 1 0 1 100000000001 |
Рекомендуемые размеры позиций и соответствующие биты экспоненты и размеры запросов:
Размер позиции (бит) | Количество битов экспоненты | Размер запроса (бит) |
---|---|---|
8 | 0 | 32 |
16 | 1 | 128 |
32 | 2 | 512 |
64 | 3 | 2048 |
Примечание . Ожидается, что 32-битного posit будет достаточно для решения почти всех классов приложений.
Quire
Quire - одна из самых полезных функций posit. Это особый тип данных, который дает положению «почти бесконечное» количество битов для накопления скалярных произведений. Он основан на работе Ульриха В. Кулиша и Уилларда Л. Миранкера .
Действительный
Gustafson еще не опубликовал полную спецификацию валидов, но они описаны как режим Unum типа III, ограничивающий результаты в заданном диапазоне.
Реализации
Есть несколько программных и аппаратных реализаций posit от сообщества. Первый полностью параметризованный аппаратный генератор положительной арифметики был предложен в 2018 году.
Реализации Unum были исследованы в Julia . и MATLAB . Также предоставляется версия C ++ с поддержкой любых размеров позиций в сочетании с любым количеством битов экспоненты. Быстрая реализация на C SoftPosit, предоставленная исследовательской группой NGA на основе Berkeley SoftFloat, является последним дополнением к доступным программным реализациям.
Проект
автор |
Тип | Точность | Quire
Служба поддержки? |
Скорость | Тестирование | Примечания |
---|---|---|---|---|---|---|
SoftPosit
ЗВЕЗДА |
Библиотека C на основе Berkeley SoftFloat
Оболочка C ++ для переопределения операторов Оболочка Python с использованием SWIG SoftPosit |
8, 16, 32 опубликованы и завершены; | да | ~ От 60 до 110 Мбит / с на ядре x86 (Broadwell) | 8: Исчерпывающий;
16: Исчерпывающий, кроме FMA, quire 32: Исчерпывающий тест еще не завершен. Нет известных ошибок. |
Самая быстрая и полная библиотека C для posit на данный момент. Лицензия с открытым исходным кодом. Предназначен для сравнения подключаемых модулей IEEE float и posit. |
posit4.nb
ЗВЕЗДА |
Блокнот Mathematica | Все | да | <80 тыс. Кадров / сек. / С | Исчерпывающий для низкой точности. Нет известных ошибок. | Оригинальное определение и прототип. Наиболее полная среда для сравнения IEEE float и posit. Открытый исходный код (лицензия MIT). Множество примеров использования, включая линейные решатели |
posit-javascript
ЗВЕЗДА |
Виджет JavaScript | Преобразуйте десятичную дробь в 6, 8, 16, 32; сгенерируйте таблицы 2–17 с помощью es 1–4. | NA | NA; интерактивный виджет | Полностью протестировано | Генератор и преобразование таблиц |
Универсальный
Stillwater Supercomputing, Inc |
Библиотека шаблонов C ++
C-библиотека Python-оболочка Golang library |
Допустимая произвольная точность posit float (p)
Unum тип 1 (p) Unum тип 2 (p) |
Произвольные конфигурации запросов с программируемой емкостью | posit <4,0> 1GPOPS
posit <8,0> 130MPOPS posit <16,1> 115MPOPS posit <32,2> 105MPOPS posit <64,3> 50MPOPS posit <128,4> 1MPOPS posit <256,5> 800KPOPS |
Полный набор для проверки произвольных позиций
Рандомы для больших конфигураций posit. Использует индукцию для доказательства правильности nbits + 1, ошибок нет |
Открытый исходный код. Лицензия MIT
полностью интегрирована с типами C / C ++ и автоматическими преобразованиями. Поддерживает полную математическую библиотеку C ++ (встроенную и преобразование в / из IEEE). Интеграция во время выполнения: MTL4 / MTL5, Eigen, Trilinos, HPR-BLAS. Интеграция приложений: G + SMO, FDBB, FEniCS, ODEintV2. , Интеграция аппаратного ускорителя TVM.ai (Xilinx, Intel, Achronix) |
Speedgo
Чунг Шин Йи |
Библиотека Python | Все | Нет | ~ 20 Мбит / с | Обширный; нет известных ошибок | Открытый исходный код (лицензия MIT) |
softposit-rkt
Дэвид Тьен |
Крепления SoftPosit для Racket | Все | да | Неизвестный | Неизвестный | |
sfpy
Билл Зорн |
Привязки SoftPosit для Python | Все | да | ~ 20-45 Мбит / с на ядре Skylake 4,9 ГГц | Неизвестный | |
позицоктава
Диего Коэльо |
Реализация октавы | Все | Нет | Неизвестный | Ограниченное тестирование; нет известных ошибок | Стандартная общественная лицензия GNU |
Сигмовидные числа
Исаак Йонемото |
Библиотека Юлии | Все <32, все ES | да | Неизвестный | Нет известных ошибок (постов).
Ошибки деления (валиды) |
Использует стандартную библиотеку шаблонов математики Джулии, может выполнять матричные и тензорные операции, комплексные числа, БПФ, DiffEQ. Поддержка валидов |
FastSigmoid
Исаак Йонемото |
Юлия и библиотека C / C ++ | 8, 16, 32, все ES | Нет | Неизвестный | Известная ошибка в 32-битном умножении | Используется LLNL в исследованиях шока |
SoftPosit.jl
Милан Клёвер |
Библиотека Юлии | На основе softposit;
8 бит (es = 0..2) 16 бит (es = 0..2) 24 бит (es = 1..2) 32 бит (es = 2) |
да | Похожий на
A * STAR "SoftPosit" (Cerlane Leong) |
Да:
Posit (8,0), Posit (16,1), Posit (32,2) Другие форматы не имеют полной функциональности |
Поддерживает основные функции линейной алгебры в Julia (умножение матриц, решение матриц, разложение Элгена и т. Д.)
Открытый исходный код. Вопросы и предложения на GitHub. Этот проект был разработан в связи с тем, что SigmoidNumbers и FastSigmoid от Isaac Yonemoto в настоящее время не поддерживаются. |
PySigmoid
Кен Меркадо |
Библиотека Python | Все | да | <20 Мбит / с | Неизвестный | Открытый исходный код (лицензия MIT). Удобный интерфейс. Пример нейронной сети. Комплексная поддержка функций. |
cppPosit
Эмануэле Руффальди |
Библиотека C ++ | От 4 до 64 (любое значение es); «Версия шаблона от 2 до 63 бит» | Нет | Неизвестный | Несколько основных тестов | 4 уровня операций с позициями. Специальная поддержка типов NaN (нестандартная) |
bfp: за пределами числа с плавающей запятой
Клеман Герен |
Библиотека C ++ | Любой | Нет | Неизвестный | Обнаружены ошибки; статус исправлений неизвестен | Поддерживает + - × ÷ √ обратный, отрицательный, сравнительный |
Verilog.jl
Исаак Йонемото |
Юлия и Верилог | 8, 16, 32, ES = 0 | Нет | Неизвестный | Всесторонне протестирован на 8-битную версию, никаких известных ошибок нет | Предназначен только для приложений глубокого обучения: сложение, вычитание и умножение. Доказательство концепции матричного умножителя было построено, но его точность не соответствует спецификации |
Lombiq Арифметика
Lombiq Technologies |
C # с Hastlayer для генерации оборудования | 8, 16, 32.
(64 бита в процессе) |
да | 10 Мбит / с
Нажмите здесь, чтобы узнать больше |
Частичное | Требуются API Microsoft .Net |
Deepfloat Джефф Джонсон, Facebook | SystemVerilog | Любой (параметризованный SystemVerilog) | да | N / A
(RTL для проектов FPGA / ASIC) |
Ограничено | Строго не соответствует требованиям posit spec.
Поддерживает +, -, /, *. Реализует как логарифмическую позицию, так и нормальную, "линейную" позицию. Лицензия: CC-BY-NC 4.0 в настоящее время |
Токийский Технологический | ПЛИС | 16, 32, выдвижной | Нет | "2 ГГц", не переводится в Mpops / s | Частичный; известные ошибки округления | Еще быть с открытым исходным кодом |
PACoGen: Posit Arthmetic Core Generator Маниш Кумар Джайсвал | Verilog HDL для арифметики положительных чисел | Любая точность.
Возможность генерировать любую комбинацию размера слова (N) и размера экспоненты (ES) |
Нет | Скорость проектирования зависит от базовой аппаратной платформы (ASIC / FPGA). | Исчерпывающие тесты для 8-битных позиций.
Многомиллионные случайные тесты выполняются для 32-битных позиций с различными комбинациями ES |
Он поддерживает метод округления до ближайшего. |
Виней Саксена, Исследовательский и технологический центр, Роберт Бош, Индия (RTC-IN), и Фархад Мерчант, RWTH Ахенский университет | Генератор Verilog для СБИС, ПЛИС | Все | Нет | Подобно числам с плавающей запятой того же размера бит | N = 8
- ES = 2 | N = 7,8,9,10,11,12 Селективные (20000 * 65536) комбинаций для - ES = 1 | N = 16 |
Для использования в коммерческих продуктах. В меру наших знаний.
*** Первая интеграция позиций в RISC-V *** |
Позиционирование включено ядро RISC-V
(Суганда Тивари, Нил Гала, Честер Ребейро, В. Камакоти, ИИТ МАДРАС) |
Реализация BSV (Bluespec System Verilog) | 32-битное положение с (es = 2) и (es = 3) | Нет | N / A | Проверено на SoftPosit для (es = 2) и протестировано с несколькими приложениями для (es = 2) и (es = 3). Нет известных ошибок. | Первое полностью готовое ядро RISC-V с возможностью установки. Поддерживает динамическое переключение между (es = 2) и (es = 3).
Больше информации здесь. |
Unumjl
REX Computing |
Версия FPGA процессора VLIW "Neo" с положительным числовым блоком | 32 | Нет | ~ 1,2 Гбит / с | Обширный; нет известных ошибок | Никакого деления или квадратного корня. Первый полностью разработанный процессор, заменивший поплавки на позиции. |
PNU: Posit Numeric Unit
Calligo Tech |
ПЛИС; первое рабочее оборудование posit | 32 | Заявлено, еще не проверено | ~ 0,5 Мбит / с | Обширные тесты, но не исчерпывающие. Нет известных ошибок. | Однооперационный ускорительный подход; позволяет напрямую выполнять коды C, написанные для чисел с плавающей запятой. + - × проверено; ÷ √ заявлено |
IBM-TACC
Цзянью Чен |
ПЛИС специального назначения | 32 | да | 16–64 Gpops / s | Протестирован только один известный случай | Выполняет матричное умножение 128 на 128 (SGEMM) с использованием quire. |
Глубокое сито
Рауль Мурильо |
Библиотека Python (программное обеспечение) | 8, 16, 32 | да | Неизвестный | Неизвестный | Фреймворк DNN с использованием posit |
SoftPosit
SoftPosit - это программная реализация позиций, основанная на Berkeley SoftFloat. Это позволяет программно сравнивать позиции и числа с плавающей запятой. В настоящее время он поддерживает
- Добавлять
- Вычесть
- Умножить
- Делить
- Слил-умножить-сложить
- Плавлен-точечный продукт (с quire)
- Квадратный корень
- Преобразование posit в целое число со знаком и без знака
- Преобразование знакового и беззнакового целого числа в положительное
- Преобразование позиции в другой размер позиции
- Меньше, равно, меньше, чем равно сравнение
- Округлить до ближайшего целого числа
Вспомогательные функции
- преобразовать двойное в положительное
- преобразовать posit в double
- привести беззнаковое целое число к положению
для 16-битных позиций с одним битом экспоненты и 8-битных позиций с нулевым битом экспоненты. Поддержка 32-битных позиций и гибкого типа (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);
//To check answer by converting it to double
double dZ = convertP8ToDouble(pZ);
printf("dZ: %.15f\n", dZ);
//To print result in binary (warning: non-portable code)
uint8_t uiZ = castUI8(pZ);
printBinary((uint64_t*)&uiZ, 8);
return 0;
}
Слитное скалярное произведение с quire16_t
//Convert double to 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;
//Set quire to 0
qZ = q16_clr(qZ);
//accumulate products without roundings
qZ = q16_fdp_add(qZ, pA, pB);
qZ = q16_fdp_add(qZ, pC, pD);
//Convert back to posit
posit16_t pZ = q16_to_p16(qZ);
//To check answer
double dZ = convertP16ToDouble(pZ);
Критика
Уильям М. Кахан, главный разработчик IEEE 754-1985, критикует униумы типа I по следующим причинам (некоторые из них рассматриваются в стандартах типа II и типа III):
- Описание unums обходных шагов с использованием исчисления для решения физических задач.
- Unums может быть дорогостоящим с точки зрения времени и энергопотребления.
- Каждое вычисление в пространстве unum может изменить длину структуры в битах. Это требует либо распаковки их в пространство фиксированного размера, либо выделения, освобождения и сборки мусора во время операций unum, аналогично проблемам при работе с записями переменной длины в массовом хранилище.
- Unums предоставляет только два вида числовых исключений: тихое и сигнальное NaN (Not-a-Number).
- Вычисление Unum может дать слишком слабые границы от выбора алгебраически правильного, но численно нестабильного алгоритма.
- Затраты и преимущества unum по сравнению с плавающей запятой с короткой точностью для задач, требующих низкой точности, не очевидны.
- Решение дифференциальных уравнений и вычисление интегралов с помощью unums гарантируют правильные ответы, но могут быть не такими быстрыми, как обычно работающие методы.
Смотрите также
- Карлсруэ Точная арифметика (KAA)
- Q (числовой формат)
- Значимые фигуры
- Устранение ошибок с плавающей точкой
- Гамма (γ) код Элиаса
- Коническая плавающая точка (TFP)
использованная литература
дальнейшее чтение
- Густафсон, Джон Л. (март 2013 г.). «Точность правильного размера: неограниченные вычисления: необходимость обеспечения точности правильного размера для экономии энергии, пропускной способности, хранилища и электроэнергии» (PDF) . Архивировано (PDF) из оригинала 06.06.2016 . Проверено 6 июня 2016 .
- Брюкнер, Рич (2015-03-02). «Слайдкаст: Джон Густафсон объясняет энергоэффективные универсальные вычисления» . Богатый отчет . Внутри HPC. Архивировано 10 июля 2016 года . Проверено 10 июня 2016 .
- Густафсон, Джон Л. (2015). «Конец числовой ошибки» (PDF) . Архивировано (PDF) из оригинала 06.06.2016 . Проверено 6 июня 2016 .
- Густафсон, Джон Л. (2016-06-03) [2016-02-22]. «Радикальный подход к вычислениям с действительными числами - Unums версии 2.0» (PPT). Архивировано 10 июля 2016 года . Проверено 10 июля 2016 .(NB. PDF-файлы поставляются без примечаний: [5] [6] )
- Густафсон, Джон Л. (2016-06-06). «Энергоэффективный и массово-параллельный подход к действительным числам» (PPT). OCRAR семинар. Архивировано 10 июля 2016 года . Проверено 10 июля 2016 . [7] [8]
- Густафсон, Джон Л. (2016). «Радикальный подход к вычислениям с действительными числами» (PDF) . SuperFri.org. Архивировано (PDF) из оригинала 10.07.2016 . Проверено 10 июля 2016 .
- Кулиш, Ульрих В. (2015). «Современная интервальная арифметика от закрытых интервалов до связанных наборов действительных чисел» (PDF) (препринт). Institut für Angewandte und Numerische Mathematik - Технологический институт Карлсруэ (KIT), Германия. ID 15/02. Архивировано (PDF) из оригинала на 2016-07-12 . Проверено 12 июля 2016 .
- Рис, Томас (2016-03-10). «Unum - целесообразное расширение IEEE 754» (PDF) (презентация). Лондонский университет Саут-Бэнк (LSBU), Великобритания: Институт информатики и автоматизации (IIA), факультет EEE & CS, Бременский университет прикладных наук , Германия. Архивировано (PDF) из оригинала на 2016-07-12 . Проверено 12 июля 2016 .
- Кахан, Уильям М. (15.07.2016). «Комментарии профессора В. Кахана к арифметике SORN» (PDF) . Архивировано (PDF) из оригинала на 2016-08-01 . Проверено 1 августа 2016 .
- Хунхолд, Ласло (2016-11-08). Формат числа Unum: математические основы, реализация и сравнение с числами с плавающей запятой IEEE 754 (PDF) (дипломная работа бакалавра). Universität zu Köln , Mathematisches Institut. arXiv : 1701.00722v1 . Архивировано (PDF) из оригинала 07.01.2017 . Проверено 23 октября 2016 .
- Стербенз, Пэт Х. (1974-05-01). Вычисление с плавающей точкой . Серия Прентис-Холла в автоматических вычислениях (1-е изд.). Энглвуд Клиффс, Нью-Джерси, США: Прентис Холл . ISBN 0-13-322495-3.
- Пещера, Скип (2016-08-17). «Реализация языка программирования J 3-битных, 4-битных, 8-битных и 16-битных единиц точности» . Проверено 3 мая 2017 .(Ссылка для скачивания Роджера Стоукса: http://www.learningj.com/unumslab.zip )
- Инголе, Дипак (28.09.2017). Встроенная реализация явного прогнозного управления моделью (кандидатская диссертация). Словацкий технологический университет в Братиславе , Словакия.
внешние ссылки
- «Конференция по арифметике нового поколения (CoNGA)» . 2017. Архивировано 4 ноября 2017 года . Проверено 4 ноября 2017 .
- «СофтПозит» . 2018 . Проверено 13 июня 2018 .
- «Вклад исходного кода сообщества» . 2018 . Проверено 13 июня 2018 .
- «Анатомия положительного числа» . 2018-04-11 . Проверено 9 августа 2019 .