Из Википедии, бесплатной энциклопедии
  (Перенаправлено с FP16 )
Перейти к навигации Перейти к поиску

В вычислении , половина точность (иногда называемый FP16 ) представляет собой двоичный с плавающей точкой компьютера номер формат , который занимает 16 бит (два байта в современных компьютерах) в памяти компьютера .

Они могут выражать значения в диапазоне ± 65 504, при этом минимальное значение выше 1 составляет 1 + 1/1024.

В стандарте IEEE 754-2008 16-битный формат base-2 упоминается как binary16 . Он предназначен для хранения значений с плавающей запятой в приложениях, где высокая точность не важна для выполнения арифметических вычислений.

Хотя реализации IEEE с плавающей запятой половинной точности относительно новы, существовало несколько более ранних 16-битных форматов с плавающей запятой, включая Hitachi HD61810 DSP [1] 1982 года, WIF Скотта [2] и графический процессор 3dfx Voodoo Graphics . [3]

Nvidia и Microsoft определили половинный тип данных в языке Cg , выпущенном в начале 2002 года, и реализовали его на кристалле в GeForce FX , выпущенном в конце 2002 года. [4] ILM искал формат изображения, который мог бы обрабатывать широкий динамический диапазон , но без жесткого диска и затрат памяти на представления с плавающей запятой, которые обычно используются для вычислений с плавающей запятой (одинарной и двойной точности). [5] Группа программируемого затенения с аппаратным ускорением во главе с Джоном Эйри из SGI (Silicon Graphics) изобрела тип данных s10e5 в 1997 году в рамках проекта «bali». Это описано вСтатья SIGGRAPH 2000 [6] (см. Раздел 4.3) и дополнительно документирована в патенте США 7518615. [7]

Этот формат используется в нескольких средах компьютерной графики, включая MATLAB , OpenEXR , JPEG XR , GIMP , OpenGL , Cg , Direct3D и D3DX . Преимущество перед 8-битными или 16-битными двоичными целыми числами заключается в том, что увеличенный динамический диапазон позволяет сохранить больше деталей в светлых и темных участках изображений. Преимущество перед 32-битными двоичными форматами с одинарной точностью состоит в том, что они требуют вдвое меньше памяти и полосы пропускания (за счет точности и диапазона). [5]

F16C расширение позволяет x86 процессоров преобразовать половинную точность поплавки и с одинарной точностью поплавков .

В зависимости от компьютера, половинная точность может быть более чем на порядок выше, чем двойная точность, например, 37 PFLOPS против половины 550 "AI-PFLOPS (Half Precision)". [8]

IEEE 754 двоичный формат с плавающей запятой половинной точности: binary16 [ править ]

Стандарт IEEE 754 определяет двоичный файл16 как имеющий следующий формат:

  • Знаковый бит : 1 бит
  • Ширина экспоненты : 5 бит
  • Существенная точность : 11 бит (10 явно сохранены)

Формат выложен следующим образом:

Предполагается, что формат имеет неявный ведущий бит со значением 1, если только поле экспоненты не хранится со всеми нулями. Таким образом , только 10 бит мантиссы появляются в формате памяти , но общая точность 11 бит. В языке IEEE 754 имеется 10 значащих битов, но есть 11 битов значимой точности (log 10 (2 11 ) ≈ 3,311 десятичных цифр, или 4 цифры ± чуть меньше 5 единиц в последнем месте ).

Экспонентное кодирование [ править ]

Двоичная экспонента с плавающей запятой половинной точности кодируется с использованием двоичного представления смещения , при этом нулевое смещение равно 15; также известный как смещение экспоненты в стандарте IEEE 754.

  • Е мин = 00001 2 - 01111 2 = -14
  • Е макс = 11110 2 - 01111 2 = 15
  • Смещение экспоненты = 01111 2 = 15

Таким образом, как определено двоичным представлением смещения, чтобы получить истинную экспоненту, смещение 15 должно быть вычтено из сохраненной экспоненты.

Сохраненные экспоненты 00000 2 и 11111 2 интерпретируются особым образом.

Минимальное строго положительное (субнормальное) значение составляет 2 −24 ≈ 5,96 × 10 −8 . Минимальное положительное нормальное значение составляет 2 −14 ≈ 6,10 × 10 −5 . Максимальное представимое значение: (2−2 −10 ) × 2 15 = 65504.

Примеры половинной точности [ править ]

Эти примеры даны в битовом представлении значения с плавающей запятой. Это включает знаковый бит, (смещенную) экспоненту и мантиссу.

0 00000 0000000001 2 = 0001 16 = ≈ 0,000000059604645 (наименьшее положительное субнормальное число)
0 00000 1111111111 2 = 03ff 16 = ≈ 0,000060975552 (наибольшее субнормальное число)
0 00001 0000000000 2 = 0400 16 = ≈ 0,00006103515625 (наименьшее положительное нормальное число)
0 11110 1111111111 2 = 7bff 16 = = 65504 (наибольшее нормальное число)
0 01110 1111111111 2 = 3bff 16 = ≈ 0,99951172 (наибольшее число меньше единицы)
0 01111 0000000000 2 = 3c00 16 = = 1 (один)
0 01111 0000000001 2 = 3c01 16 = ≈ 1.00097656 (наименьшее число больше единицы)
0 01101 0101010101 2 = 3555 16 = = 0,33325195 (округление от 1/3 до ближайшего)
1 10000 0000000000 2 = c000 16 = −2
0 00000 0000000000 2 = 0000 16 = 01 00000 0000000000 2 = 8000 16 = −0
0 11111 0000000000 2 = 7c00 16 = бесконечность1 11111 0000000000 2 = fc00 16 = −infinity

По умолчанию 1/3 округляется в меньшую сторону, как для двойной точности , из-за нечетного числа бит в мантиссе. Биты за точкой округления 0101...меньше 1/2 единицы в последнем разряде .

Ограничения точности десятичных значений в [0, 1] [ править ]

  • Десятичные числа от 2 до 24 (минимальное положительное субнормальное) до 2-14 (максимальное субнормальное): фиксированный интервал 2-24
  • Десятичные числа от 2 до 14 (минимальная положительная норма) до 2-13 : фиксированный интервал 2 -24
  • Десятичные числа от 2 −13 до 2 −12 : фиксированный интервал 2 −23
  • Десятичные числа от 2 −12 до 2 −11 : фиксированный интервал 2 −22
  • Десятичные числа от 2 −11 до 2 −10 : фиксированный интервал 2 −21
  • Десятичные числа от 2 −10 до 2 −9 : фиксированный интервал 2 −20
  • Десятичные числа от 2 −9 до 2 −8 : фиксированный интервал 2 −19
  • Десятичные числа от 2 −8 до 2 −7 : фиксированный интервал 2 −18
  • Десятичные числа от 2 −7 до 2 −6 : фиксированный интервал 2 −17
  • Десятичные числа от 2 −6 до 2 −5 : фиксированный интервал 2 −16
  • Десятичные числа от 2 −5 до 2 −4 : фиксированный интервал 2 −15
  • Десятичные числа от 2 −4 до 2 −3 : фиксированный интервал 2 −14
  • Десятичные числа от 2 −3 до 2 −2 : фиксированный интервал 2 −13
  • Десятичные числа от 2 −2 до 2 −1 : фиксированный интервал 2 −12
  • Десятичные числа от 2 −1 до 2 −0 : фиксированный интервал 2 −11

Ограничения точности десятичных значений в [1, 2048] [ править ]

  • Десятичные числа от 1 до 2: фиксированный интервал 2 −10 (1 + 2 −10 - следующее по величине число с плавающей запятой после 1)
  • Десятичные числа от 2 до 4: фиксированный интервал от 2 до 9.
  • Десятичные между 4 и 8: фиксированный интервал 2 -8
  • Десятичные числа от 8 до 16: фиксированный интервал 2-7.
  • Десятичные числа от 16 до 32: фиксированный интервал 2 −6
  • Десятичные числа от 32 до 64: фиксированный интервал 2 −5
  • Десятичные числа от 64 до 128: фиксированный интервал 2 −4
  • Десятичные числа от 128 до 256: фиксированный интервал 2 −3
  • Десятичные числа от 256 до 512: фиксированный интервал 2 −2
  • Десятичные числа от 512 до 1024: фиксированный интервал 2 −1
  • Десятичные числа от 1024 до 2048: фиксированный интервал 2 0

Ограничения точности для целочисленных значений [ править ]

  • Целые числа от 0 до 2048 могут быть точно представлены (а также между -2048 и 0)
  • Целые числа от 2048 до 4096 округляются до кратного 2 (четного числа)
  • Целые числа от 4096 до 8192 округляются до кратного 4
  • Целые числа от 8192 до 16384 округляются до кратного 8
  • Целые числа от 16384 до 32768 округляются до кратного 16
  • Целые числа от 32768 до 65519 округляются до кратного 32
  • Целые числа выше 65519 округляются до «бесконечности» при использовании округления до четности, выше 65535 при использовании округления до нуля или выше 65504 (наибольшее представимое конечное значение) при использовании округления до бесконечности.

Альтернативный вариант ARM с половинной точностью [ править ]

Процессоры ARM поддерживают (через бит регистра управления с плавающей запятой ) «альтернативный формат половинной точности», который устраняет особый случай для значения экспоненты 31 (11111 2 ). [9] Он почти идентичен формату IEEE, но в нем нет кодирования для бесконечности или NaN; вместо этого показатель степени 31 кодирует нормализованные числа в диапазоне от 65536 до 131008.

Использует [ редактировать ]

Аппаратное и программное обеспечение для машинного обучения или нейронных сетей, как правило, использует половинную точность: такие приложения обычно выполняют большой объем вычислений, но не требуют высокого уровня точности.

На старых компьютерах, которые обращаются к 8 или 16 битам за раз (большинство современных компьютеров обращаются к 32 или 64 битам одновременно), арифметика половинной точности выполняется быстрее, чем одинарная точность, и значительно быстрее, чем двойная точность. В системах с инструкциями, которые могут обрабатывать несколько чисел с плавающей запятой в одной инструкции, половинная точность часто обеспечивает более высокую среднюю пропускную способность. [10]

См. Также [ править ]

  • bfloat16 формат с плавающей запятой : альтернативный 16-битный формат с плавающей запятой с 8 битами экспоненты и 7 битами мантиссы
  • IEEE 754 : стандарт IEEE для арифметики с плавающей запятой (IEEE 754)
  • ISO / IEC 10967 , Арифметика, не зависящая от языка
  • Примитивный тип данных
  • Формат изображения RGBE

Ссылки [ править ]

  1. ^ "Hitachi :: dataBooks :: Руководство пользователя цифрового сигнального процессора HD61810" . Archive.org . Проверено 14 июля 2017 .
  2. ^ Скотт, Томас Дж. (Март 1991). «Математика и информатика в разногласиях с действительными числами» . SIGCSE '91 Материалы двадцать второго технического симпозиума SIGCSE по образованию в области компьютерных наук . 23 (1): 130–139. DOI : 10.1145 / 107004.107029 . ISBN 0897913779. S2CID  16648394 .
  3. ^ "/home/usr/bk/glide/docs2.3.1/GLIDEPGM.DOC" . Gamers.org . Проверено 14 июля 2017 .
  4. ^ "vs_2_sw" . Cg 3.1 Toolkit Documentation . Nvidia . Дата обращения 17 августа 2016 .
  5. ^ a b "OpenEXR" . OpenEXR . Проверено 14 июля 2017 .
  6. ^ Марк С. Пирси; Марк Олано; Джон Эйри; П. Джеффри Ангар. «Интерактивное многопроходное программируемое затенение» (PDF) . People.csail.mit.edu . Проверено 14 июля 2017 .
  7. ^ "Патент US7518615 - Система отображения с растеризацией с плавающей запятой и с плавающей запятой ... - Патенты Google" . Google.com . Проверено 14 июля 2017 .
  8. ^ "Об ABCI - О ABCI | ABCI" . abci.ai . Проверено 6 октября 2019 .
  9. ^ "Поддержка чисел с плавающей запятой половинной точности" . Руководство пользователя компилятора средств компиляции RealView . 10 декабря 2010 . Проверено 5 мая 2015 .
  10. ^ Хо, Нхут-Минь; Вонг, Вен-Фай (1 сентября 2017 г.). «Использование арифметики половинной точности в графических процессорах Nvidia» (PDF) . Департамент компьютерных наук Национального университета Сингапура . Проверено 13 июля 2020 года . Nvidia недавно представила встроенную поддержку операций с плавающей запятой половинной точности (FP16) в своих графических процессорах Pascal. В основном это было мотивировано возможностью того, что это ускорит работу приложений, интенсивно использующих данные и устойчивых к ошибкам, в графических процессорах.

Дальнейшее чтение [ править ]

  • Хронос Вулкан подписал 16-битный формат с плавающей запятой

Внешние ссылки [ править ]

  • Minifloats (в обзоре форматов с плавающей запятой )
  • Сайт OpenEXR
  • Константы половинной точности из D3DX
  • Обработка половинной точности OpenGL
  • Быстрые преобразования половинного числа с плавающей запятой
  • Вариант Analog Devices (четырехбитная экспонента)
  • Исходный код C для преобразования между двойной, одинарной и половинной точностью IEEE можно найти здесь
  • Исходный код Java для преобразования с плавающей запятой половинной точности
  • Плавающая точка половинной точности для одной из расширенных функций GCC