bfloat16 formát s plovoucí desetinnou čárkou - bfloat16 floating-point format
Formáty s plovoucí desetinnou čárkou |
---|
IEEE 754 |
jiný |
Bfloat16 ( Brain Floating Point ) ve formátu s plovoucí desetinnou čárkou je číslo počítačový formát zabírat 16 bitů v paměti počítače ; představuje široký dynamický rozsah číselných hodnot pomocí plovoucího bodu radix . Tento formát je zkrácenou (16bitovou) verzí 32bitového formátu IEEE 754 s jednoduchou přesností s plovoucí desetinnou čárkou (binary32) se záměrem zrychlit strojové učení a výpočetní techniku s blízkým senzorem . Zachovává přibližný dynamický rozsah 32bitových čísel s plovoucí desetinnou čárkou zachováním 8 exponentních bitů , ale podporuje pouze 8bitovou přesnost, nikoli 24bitový význam formátu binary32. Více než 32bitová čísla s plovoucí desetinnou čárkou s jednoduchou přesností nejsou čísla bfloat16 vhodná pro celočíselné výpočty, ale toto není jejich zamýšlené použití. Bfloat16 se používá ke snížení požadavků na úložiště a zvýšení rychlosti výpočtu algoritmů strojového učení.
Formát bfloat16 byl vyvinut společností Google Brain , výzkumnou skupinou pro umělou inteligenci ve společnosti Google. Formát bfloat16 se používá v procesorech Intel AI , jako jsou Nervana NNP-L1000, procesory Xeon ( rozšíření AVX-512 BF16) a Intel FPGA , Google Cloud TPU a TensorFlow . ARMv8.6-A , AMD ROCm a CUDA také podporují formát bfloat16. Na těchto platformách lze bfloat16 použít také v aritmetice se smíšenou přesností , kde lze čísla bfloat16 provozovat a rozšiřovat na širší datové typy.
bfloat16 formát s plovoucí desetinnou čárkou
bfloat16 má následující formát:
- Signální bit : 1 bit
- Šířka exponentu : 8 bitů
- Významná přesnost : 8 bitů (7 explicitně uložených), na rozdíl od 24 bitů v klasickém formátu s jednoduchou přesností s plovoucí desetinnou čárkou
Formát bfloat16, který je zkráceným 32bitovým floatem s jednoduchou přesností IEEE 754 , umožňuje rychlou konverzi do az 32bitového floatu s jednou přesností IEEE 754; při převodu do formátu bfloat16 jsou exponentní bity zachovány, zatímco významné pole může být redukováno zkrácením (tedy odpovídajícím zaokrouhlování směrem k 0 ), přičemž speciální případ NaN je ignorován . Zachováním exponentních bitů se udržuje rozsah 32bitového floatu ≈ 10 −38 až ≈ 3 × 10 38 .
Bity jsou rozloženy následovně:
podepsat | exponent (5 bitů) | zlomek (10 bitů) | ||||||||||||||
┃ | ┌───────┐ | ┌───────────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 10 | 9 | 0 |
podepsat | exponent (8 bitů) | zlomek (23 bitů) | ||||||||||||||||||||||||||||||
┃ | ┌──────────────┐ | ┌────────────────────────---- - - - - - - - - - - - - - - - - - | ||||||||||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
31 | 30 | 23 | 22 | 0 |
podepsat | exponent (8 bitů) | zlomek (7 bitů) | ||||||||||||||
┃ | ┌──────────────┐ | ┌────────────┐ | ||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
15 | 14 | 7 | 6 | 0 |
podepsat | exponent (8 bitů) | zlomek (10 bitů) | |||||||||||||||||
┃ | ┌──────────────┐ | ┌───────────────────┐ | |||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
18 | 17 | 10 | 9 | 0 |
podepsat | exponent (7 bitů) | zlomek (16 bitů) | ||||||||||||||||||||||
┃ | ┌────────────┐ | ┌─------ | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
23 | 22 | 16 | 15 | 0 |
podepsat | exponent (8 bitů) | zlomek (15 bitů) | ||||||||||||||||||||||
┃ | ┌──────────────┐ | ┌─------ | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
23 | 22 | 15 | 14 | 0 |
Kontrast s bfloat16 a jednoduchou přesností
S | E | E | E | E | E | E | E | E | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F | F |
Legenda
-
S: podepsat
- E: exponent
- F: zlomek (koncový význam ) v obou formátech
- f: zlomek (koncový význam) v 32bitové jednoduché přesnosti (srovnávací)
Kódování exponentů
Bfloat16 binární exponent s plovoucí desetinnou čárkou je kódován pomocí offset-binární reprezentace, přičemž nulový offset je 127; také známý jako zkreslení exponentu ve standardu IEEE 754.
- E min = 01 H -7F H = -126
- E max = FE H -7F H = 127
- Zkreslení exponentu = 7F H = 127
Aby se tedy získal skutečný exponent definovaný ofsetovou binární reprezentací, musí být offset 127 odečten od hodnoty pole exponent.
Minimální a maximální hodnoty pole exponent (00 H a FF H ) jsou interpretovány speciálně, jako ve standardních formátech IEEE 754.
Exponent | Významná nula | Významné nenulové | Rovnice |
---|---|---|---|
00 H | nula , -0 | subnormální čísla | (−1) signbit × 2 −126 × 0. signifikantní bitů |
01 H , ..., FE H | normalizovaná hodnota | (−1) signbit × 2 exponentbits −127 × 1. signifikantní bity | |
FF H | ± nekonečno | NaN (tichý, signalizace) |
Minimální kladná normální hodnota je 2 −126 ≈ 1,18 × 10 −38 a minimální kladná (subnormální) hodnota je 2 −126−7 = 2 −133 ≈ 9,2 × 10 −41 .
Kódování speciálních hodnot
Pozitivní a negativní nekonečno
Stejně jako v IEEE 754 jsou kladné a záporné nekonečno reprezentovány odpovídajícími znaménkovými bity , všemi 8 exponentními bity (FF hex ) a všemi významnými bity nula. Výslovně,
val s_exponent_signcnd
+inf = 0_11111111_0000000
-inf = 1_11111111_0000000
Není to číslo
Stejně jako v IEEE 754 , NaN hodnoty jsou představovány buď bit znaménka, všech 8 bitů exponent sada (FF hex ) a ne všechny significand bity nula. Výslovně,
val s_exponent_signcnd
+NaN = 0_11111111_klmnopq
-NaN = 1_11111111_klmnopq
kde alespoň jeden z k, l, m, n, o, p nebo q je 1. Stejně jako u IEEE 754 mohou být hodnoty NaN tiché nebo signalizační, i když od září 2018 není známo použití signalizace bfloat16 NaN.
Dosah a přesnost
Bfloat16 je navržen tak, aby udržoval číselný rozsah od 32bitového formátu IEEE 754 s jednoduchou přesností s plovoucí desetinnou čárkou (binary32), přičemž snižuje přesnost z 24 bitů na 8 bitů. To znamená, že přesnost je mezi dvěma a třemi desetinnými číslicemi a bfloat16 může představovat konečné hodnoty až do přibližně 3,4 × 10 38 .
Příklady
Tyto příklady jsou uvedeny v bitové reprezentaci hodnoty s plovoucí desetinnou čárkou , v hexadecimálním a binárním formátu. To zahrnuje znaménko, (zkreslený) exponent a význam.
3f80 = 0 01111111 0000000 = 1 c000 = 1 10000000 0000000 = −2
7f7f = 0 11111110 1111111 = (28 − 1) × 2−7 × 2127 ≈ 3.38953139 × 1038 (max finite positive value in bfloat16 precision) 0080 = 0 00000001 0000000 = 2−126 ≈ 1.175494351 × 10−38 (min normalized positive value in bfloat16 precision and single-precision floating point)
Maximální kladná konečná hodnota normálního čísla bfloat16 je 3,38953139 × 10 38 , mírně pod (2 24 - 1) × 2 −23 × 2 127 = 3,402823466 × 10 38 , maximální konečná kladná hodnota je reprezentovatelná jednoduchou přesností.
Nuly a nekonečna
0000 = 0 00000000 0000000 = 0 8000 = 1 00000000 0000000 = −0
7f80 = 0 11111111 0000000 = infinity ff80 = 1 11111111 0000000 = −infinity
Zvláštní hodnoty
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
Viz také
- Poloviční přesnost s plovoucí desetinnou čárkou : 16bitový float s 1bitovým znaménkem, 5bitovým exponentem a 11bitovým významem, jak definuje IEEE 754
- ISO/IEC 10967 , aritmetika nezávislá na jazyce
- Primitivní datový typ
- Miniploat
- Google Brain