bfloat16 (brain floating point、BF16)とは、浮動小数点を16ビット長で表す形式のひとつである。
GoogleがTensorFlow向けに開発しているもの。
BF16は「単純にFP32の仮数部を切り詰めた」というものである。
汎用的なFP16に対して「BF16はFP32と高速変換できる」のが利点であり、FP32との変換が頻繁に発生する用途(主に人工知能)向けだと言われている。
FP16
sign
|
exponent (5 bit)
|
fraction (10 bit)
|
┃
|
┌───────┐
|
┌─────────────────┐
|
|
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0
|
|
15 |
14 |
|
10 |
9 |
|
0
|
bfloat16
sign
|
exponent (8 bit)
|
fraction (7 bit)
|
┃
|
┌─────────────┐
|
┌───────────┐
|
|
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0
|
|
15 |
14 |
|
7 |
6 |
|
0
|
FP32
sign
|
exponent (8 bit)
|
fraction (23 bit)
|
┃
|
┌─────────────┐
|
┌───────────────────────────────────────────┐
|
|
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0
|
|
31 |
30 |
|
23 |
22 |
|
0
|
FP32からBF16への丸め処理の発動条件は
- FP32の仮数部の「7ビット目が0」かつ「8ビット目が1」
主なBF16をサポートする製品[編集 | ソースを編集]