Формат с плавающей запятой половинной точности - Half-precision floating-point format
В вычисление, половинная точность (иногда называют FP16) это двоичный плавающая точка формат номера компьютера что занимает 16 бит (два байта в современных компьютерах) в память компьютера.
Они могут выражать значения в диапазоне ± 65 504, при этом минимальное значение выше 1 составляет 1 + 1/1024.
в IEEE 754-2008 стандартный, 16-битный база-2 формат называется двоичный16. Он предназначен для хранения значений с плавающей запятой в приложениях, где более высокая точность не важна для выполнения арифметических вычислений.
Хотя реализации IEEE с плавающей запятой половинной точности относительно новы, существовало несколько более ранних 16-битных форматов с плавающей запятой, в том числе Hitachi HD61810 DSP.[1] 1982 года, WIF Скотта[2] и Графический процессор 3dfx Voodoo.[3]
Nvidia и Microsoft определил половина тип данных в Cg язык, выпущенный в начале 2002 года, и реализованный в кремнии в GeForce FX, выпущенный в конце 2002 года.[4] ILM искал формат изображения, который мог бы обрабатывать широкий динамический диапазон, но без жесткого диска и затрат памяти на представления с плавающей запятой, которые обычно используются для вычислений с плавающей запятой (одинарная и двойная точность).[5] Группа программируемого затенения с аппаратным ускорением во главе с Джоном Эйри в SGI (Кремниевая графика) изобрел тип данных s10e5 в 1997 году в рамках проекта «Бали». Это описано в СИГГРАФ Бумага 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 |
|
Другой |
IEEE 754 двоичный формат с плавающей запятой половинной точности: binary16
Стандарт IEEE 754 определяет двоичный16 как имеющий следующий формат:
- Знаковый бит: 1 бит
- Экспонента ширина: 5 бит
- Значительный точность: 11 бит (10 явно сохранены)
Формат выложен следующим образом:
Предполагается, что формат имеет неявный ведущий бит со значением 1, если только поле экспоненты не хранится со всеми нулями. Таким образом, только 10 бит значимое появляются в формате памяти, но общая точность составляет 11 бит. В языке IEEE 754 имеется 10 значащих битов, но есть 11 битов значимой точности (log10(211) ≈ 3,311 десятичных цифр, или 4 цифры ± чуть меньше 5 единицы на последнем месте ).
Экспонентное кодирование
Двоичная экспонента с плавающей запятой половинной точности кодируется с использованием смещение-двоичный представление с нулевым смещением 15; также известный как смещение экспоненты в стандарте IEEE 754.
- Eмин = 000012 − 011112 = −14
- EМаксимум = 111102 − 011112 = 15
- Экспонентное смещение = 011112 = 15
Таким образом, как определено двоичным представлением смещения, чтобы получить истинную экспоненту, смещение 15 должно быть вычтено из сохраненной экспоненты.
Сохраненные экспоненты 000002 и 111112 интерпретируются специально.
Экспонента | Significand = ноль | Значение ≠ ноль | Уравнение |
---|---|---|---|
000002 | нуль, −0 | субнормальные числа | (−1)знак × 2−14 × 0 значимых бит2 |
000012, ..., 111102 | нормализованное значение | (−1)знак × 2показатель −15 × 1. Значащие биты2 | |
111112 | ±бесконечность | NaN (тихо, сигнализирует) |
Минимальное строго положительное (субнормальное) значение равно 2−24 ≈ 5.96 × 10−8.Минимальное положительное нормальное значение - 2−14 ≈ 6.10 × 10−5Максимальное представимое значение - (2−2−10) × 215 = 65504.
Примеры половинной точности
Эти примеры даны в битовом представлении значения с плавающей запятой. Это включает знаковый бит, (смещенную) экспоненту и мантиссу.
0 00000 00000000012 = 000116 = ≈ 0,000000059604645 (наименьшее положительное субнормальное число)
0 00000 11111111112 = 03ff16 = ≈ 0,000060975552 (наибольшее субнормальное число)
0 00001 00000000002 = 040016 = ≈ 0,000061035156 (наименьшее положительное нормальное число)
0 11110 11111111112 = 7bff16 = = 65504 (наибольшее нормальное число)
0 01110 11111111112 = 3bff16 = ≈ 0,99951172 (наибольшее число меньше единицы)
0 01111 00000000002 = 3c0016 = = 1 (один)
0 01111 00000000012 = 3c0116 = ≈ 1.00097656 (наименьшее число больше единицы)
0 01101 01010101012 = 355516 = = 0,33325195 (округление от 1/3 до ближайшего)
1 10000 00000000002 = c00016 = −2
0 00000 00000000002 = 000016 = 01 00000 00000000002 = 800016 = −0
0 11111 00000000002 = 7c0016 = бесконечность1 11111 00000000002 = fc0016 = −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: фиксированный интервал 20
Ограничения точности для целочисленных значений
- Целые числа от 0 до 2048 могут быть точно представлены (а также между -2048 и 0)
- Целые числа от 2048 до 4096 округляются до кратного 2 (четного числа)
- Целые числа от 4096 до 8192 округляются до кратного 4
- Целые числа от 8192 до 16384 округляются до кратного 8
- Целые числа от 16384 до 32768 округляются до кратного 16
- Целые числа от 32768 до 65519 округляются до кратного 32[9]
- Целые числа выше 65519 округляются до «бесконечности» при использовании округления до четности, выше 65535 при использовании округления до нуля или выше 65504 при использовании округления до бесконечности.
Альтернативный вариант ARM с половинной точностью
Поддержка процессоров ARM (с плавающей точкой контрольный регистр bit) "альтернативный формат половинной точности", который устраняет особый случай для значения экспоненты 31 (111112).[10] Он почти идентичен формату IEEE, но в нем нет кодирования для бесконечности или NaN; вместо этого показатель степени 31 кодирует нормализованные числа в диапазоне от 65536 до 131008.
Использует
Аппаратное и программное обеспечение для машинное обучение или же нейронные сети как правило, используют половинную точность: такие приложения обычно выполняют большой объем вычислений, но не требуют высокого уровня точности.
На старых компьютерах, которые обращаются к 8 или 16 битам за раз (большинство современных компьютеров обращаются к 32 или 64 битам одновременно), арифметика половинной точности выполняется быстрее, чем одинарная точность, и значительно быстрее, чем двойная точность. В системах с инструкциями, которые могут обрабатывать несколько чисел с плавающей запятой в одной инструкции, половинная точность часто обеспечивает более высокую среднюю пропускную способность.[11]
Смотрите также
- bfloat16 формат с плавающей запятой: Альтернативный 16-битный формат с плавающей запятой с 8 битами экспоненты и 7 битами мантиссы
- IEEE 754: Стандарт IEEE для арифметики с плавающей запятой (IEEE 754)
- ISO / IEC 10967, Независимая от языка арифметика
- Примитивный тип данных
- Формат изображения RGBE
Рекомендации
- ^ "Hitachi :: dataBooks :: Руководство пользователя цифрового сигнального процессора HD61810". Archive.org. Получено 2017-07-14.
- ^ Скотт, Томас Дж. (Март 1991 г.). «Математика и информатика в разногласиях с действительными числами». SIGCSE '91 Материалы двадцать второго технического симпозиума SIGCSE по образованию в области компьютерных наук. 23 (1): 130–139. Дои:10.1145/107004.107029. ISBN 0897913779. S2CID 16648394.
- ^ "/home/usr/bk/glide/docs2.3.1/GLIDEPGM.DOC". Gamers.org. Получено 2017-07-14.
- ^ "vs_2_sw". Документация по Cg 3.1 Toolkit. Nvidia. Получено 17 августа 2016.
- ^ а б «OpenEXR». OpenEXR. Получено 2017-07-14.
- ^ Марк С. Пирси; Марк Олано; Джон Эйри; П. Джеффри Ангар. «Интерактивное многопроходное программируемое затенение» (PDF). People.csail.mit.edu. Получено 2017-07-14.
- ^ «Патент US7518615 - Система отображения с растеризацией с плавающей запятой и с плавающей запятой ... - Патенты Google». Google.com. Получено 2017-07-14.
- ^ «Об ABCI - О ABCI | ABCI». abci.ai. Получено 2019-10-06.
- ^ «Калькулятор поплавка Mediump». Получено 2016-07-26. Калькулятор половинной точности с плавающей запятой
- ^ "Поддержка чисел с плавающей запятой половинной точности". Руководство пользователя компилятора средств компиляции RealView. 10 декабря 2010 г.. Получено 2015-05-05.
- ^ Хо, Нхут-Минь; Вонг, Вен-Фай (1 сентября 2017 г.). «Использование арифметики половинной точности в графических процессорах Nvidia» (PDF). Департамент компьютерных наук, Национальный университет Сингапура. Получено 13 июля, 2020.
Nvidia недавно представила встроенную поддержку операций с плавающей запятой половинной точности (FP16) в своих графических процессорах Pascal. В основном это было мотивировано возможностью того, что это ускорит работу приложений, интенсивно использующих данные и устойчивых к ошибкам, в графических процессорах.
дальнейшее чтение
внешняя ссылка
Эта статья использование внешняя ссылка может не следовать политикам или рекомендациям Википедии.Июль 2017 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
- Минифлоты (в Обзор форматов с плавающей запятой)
- Сайт OpenEXR
- Константы половинной точности из D3DX
- Обработка половинной точности OpenGL
- Быстрые преобразования половинного числа с плавающей запятой
- Вариант аналоговых устройств (четырехбитная экспонента)
- Исходный код C для преобразования между двойной, одинарной и половинной точностью IEEE можно найти здесь
- Исходный код Java для преобразования с плавающей запятой половинной точности
- Плавающая точка половинной точности для одной из расширенных функций GCC