Формат с плавающей запятой bfloat16 - bfloat16 floating-point format

редактировать
Формат чисел с плавающей запятой, используемый в компьютерных процессорах

bfloat16 (Brain Floating Point) формат с плавающей запятой - это формат компьютерных чисел, занимающий 16 бит в памяти компьютера ; он представляет широкий динамический диапазон числовых значений с помощью точки с плавающей точкой. Этот формат представляет собой усеченную (16-битную) версию 32-битного IEEE 754 формата с плавающей запятой одинарной точности (binary32) с целью ускорения машинного обучения и ближний датчик. Он сохраняет приблизительный динамический диапазон 32-битных чисел с плавающей запятой, сохраняя 8 битов экспоненты, но поддерживает только 8-битную точность, а не 24-битное значение двоичного32 формат. В большей степени, чем 32-битные числа с плавающей запятой одинарной точности, числа bfloat16 не подходят для целочисленных вычислений, но это не их предполагаемое использование. Bfloat16 используется для уменьшения требований к памяти и увеличения скорости вычислений алгоритмов машинного обучения.

Формат bfloat16 используется в процессорах Intel AI, таких как Nervana NNP -L1000, процессоры Xeon (AVX-512 расширения BF16) и Intel FPGA, Google Cloud TPU и TensorFlow. ARMv8.6-A также поддерживает формат bfloat16. По состоянию на октябрь 2019 года AMD добавила поддержку этого формата в свои библиотеки ROCm.

Содержание
  • 1 формат с плавающей запятой bfloat16
    • 1.1 В отличие от bfloat16 и одинарная точность
      • 1.1.1 Условные обозначения
    • 1.2 Экспоненциальное кодирование
  • 2 Кодирование специальных значений
    • 2.1 Положительная и отрицательная бесконечность
    • 2.2 Не число
  • 3 Диапазон и точность
  • 4 Примеры
    • 4.1 Нули и бесконечности
    • 4.2 Специальные значения
    • 4.3 NaN
  • 5 См. Также
  • 6 Ссылки
Формат с плавающей точкой bfloat16

bfloat16 имеет следующий формат:

Формат bfloat16, представляющий собой усеченный IEEE 754 одинарной точности 32-битное число с плавающей запятой, обеспечивает быстрое преобразование в и из IEEE 754 32-битных числа с плавающей запятой одинарной точности; при преобразовании в формат bfloat16 биты экспоненты сохраняются, в то время как поле значимости может быть уменьшено путем усечения (что соответствует округлению до 0 ), игнорируя особый случай NaN. Сохранение битов экспоненты поддерживает диапазон 32-битных чисел с плавающей запятой от ≈ 10 до ≈ 3 × 10.

Биты располагаются следующим образом:

IEEE с половинной точностью 16-битное число с плавающей запятой
знакпоказатель степени (5 бит)дробь (10 бит)
┌─────────────┐┌── ───────────────────────┐
0011000100000000
15141090
IEEE 754 с одинарной точностью 32-битное число с плавающей запятой
знакэкспонента (8 бит)дробь (23 бит)
┌─────────────────────┐┌─── ──────────────────────────────────────────────────── ────────────┐
00111110001000000000000000000000
313023220
bfloat16
знакпоказатель степени (8 бит)дробь (7 бит)
┌─── ──────────────────┐┌─────────────────┐
0011111000100000
1514760
TensorFloat от NVidia
знакпоказатель степени (8 бит)дробь (10 бит)
┌─────────────────────┌────────────────────────
0011111000100000000
18171090
Формат AMD fp24
знакэкспонента (7 бит)дробь (16 бит)
┌────────────────────┌────── ────────────────────────────────
001111000100000000000000
232216150

Контраст с bfloat16 и одинарной точностью

SEEEEEEEEFFFFFFFffffffffffffffff

Легенда

Кодирование экспоненты

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

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

Минимальные и максимальные значения поля экспоненты (00 H и FF H) интерпретируются особым образом, как в стандартных форматах IEEE 754.

ПоказательЗнаки и нольЗначимые и ненулевыеУравнение
00Hноль, −0 субнормальные числа (-1) × 2 × 0. значащие биты
01H,..., FE Hнормализованное значение(-1) × 2 × 1. значащие биты
FFH±бесконечность NaN (тихий, сигнальный)

Минимальное положительное нормальное значение - 2 ≈ 1,18 × 10, а минимальное положительное (субнормальное) значение - 2 = 2 ≈ 9,2 × 10.

Кодирование специальных значений

Положительная и отрицательная бесконечность

Так же, как в IEEE 754, положительная и отрицательная бесконечность представлены соответствующими знаковыми битами , установлены все 8 битов экспоненты (FF шестнадцатеричный) и все значащие биты нулевые. Явно

val s_exponent_signcnd + inf = 0_11111111_0000000 -inf = 1_11111111_0000000

Not a Number

Так же, как в IEEE 754, NaN значения представлены с любой знаковый бит, все 8 битов экспоненты установлены (FF шестнадцатеричный), а не все значащие биты равны нулю. Явно

val s_exponent_signcnd + NaN = 0_11111111_klmnopq -NaN = 1_11111111_klmonpq

, где хотя бы одно из k, l, m, n, o, p или q равно 1. Как и в случае с IEEE 754, значения NaN могут быть тихими. или сигнализация, хотя на сентябрь 2018 года не было известных применений сигнализации bfloat16 NaN.

Диапазон и точность

Bfloat16 предназначен для поддержания диапазона чисел из 32-битного IEEE 754 одинарной точности в формате с плавающей запятой (binary32), снижая точность с 24 до 8 бит. Это означает, что точность составляет от двух до трех десятичных цифр, а bfloat16 может представлять конечные значения примерно до 3,4 × 10.

Примеры

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

3f80 = 0 01111111 0000000 = 1 c000 = 1 10000000 0000000 = −2
7f7f = 0 11111110 1111111 = (2 - 1) × 2 × 2 ≈ 3,38953139 × 10 (макс. значение с точностью до bfloat16) 0080 = 0 00000001 0000000 = 2 ≈ 1,175494351 × 10 (минимальное нормализованное положительное значение с точностью до bfloat16 и с плавающей запятой с одинарной точностью)

Максимальное положительное конечное значение нормального числа bfloat16 составляет 3,38953139 × 10, немного ниже (2 - 1) × 2 × 2 = 3,402823466 × 10, максимальное конечное положительное значение, представляемое с одинарной точностью.

Нули и бесконечности

0000 = 0 00000000 0000000 = 0 8000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = бесконечность ff80 = 1 11111111 0000000 = - бесконечность

Специальные значения

4049 = 0 10000000 1001001 = 3,140625 ≈ π (pi) 3eab = 0 01111101 0101011 = 0,333984375 ≈ 1/3

NaNs

ffc1 = x 11111111 1000001 =>qNaN ff81 = x 11111111 0000001 =>sNaN
См. также
Ссылки
Последняя правка сделана 2021-05-12 03:06:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте