Bro*_*her 9 c++ floating-point c++23
Cppreference文档包含 5个stdfloat新类型:float16_t、float32_t、float64_t和float128_t。bfloat16_t虽然前 4 种类型是不言自明的(分别是 16、32、64 和 128 位的浮点数),但最后一种类型bfloat16_t对我来说根本不清楚。这个类型代表什么?它的名字中的是什么b意思?
Nic*_*las 15
“bfloat16”指的是一种相当新的 16 位浮点格式,它不是有效的 IEEE-754/IEC 60559 定义的格式。但这与他们有关。
BINARY16 只是 BINARY32,其组件编号较小。但尺寸变化是均匀分布的;它具有较小的尾数和较小的指数。
Bfloat16 选择不同的方式来使用其 16 位。它选择保持指数与 BINARY32(8 位)相同的大小,同时将尾数缩小到 7 位(显式)。这使得 bfloat16 和 BINARY32 之间的转换变得更快。
它确实有一些特殊情况的奇怪之处,但总的来说,它是一个截断的 BINARY32。尽管它得到数量惊人的 GPU 硬件的广泛支持,但它并不是真正的标准。
bfloat16 的实用性归结为两点:转换速度和 BINARY16 的妥协。
BINARY16 是一种很棒的颜色格式。对于高动态范围渲染的许多情况来说,最大范围仅比零高 5 个十进制数量级就足够了。
但这种妥协对于机器学习操作来说是一个问题。如果精度很重要,那么您将不得不花费 32 位来获得它。但如果精度不是那么重要,那么能够在不影响范围的情况下节省 16 位,在这些应用中可能会很有用。