





















IEEE 754 存在的意义是让同一个浮点运算在不同硬件上结果一致。对通用 CPU 来说至关重要,同一个程序在 Intel 和 AMD 的机器上跑,浮点结果应该一样。
但 Desmazes 的硬件是矩阵乘法加速器(脉动阵列),不是通用 CPU。她的芯片只需要跟自己一致,不用跟别人的浮点结果对齐。
于是她做了一个让 IEEE 信徒血压升高的事,砍掉了所有不需要的东西。
她的 bfloat16 实现只有一种舍入模式,RZ(round toward zero,向零舍入),而不是 IEEE 规定的五种。选 RZ 不光因为硬件实现最简单,还因为它溢出时不会产生 ±∞ ,而是 clamp 到最大或最小值。
小贴士 。clamp 和 RZ 为什么不会产生无穷大——计算结果超出 bfloat16 能表示的最大值(比如
65504)时,RZ 模式直接停在最大值,不溢出到无穷大。因为 RZ 永远向零方向舍入,最大值离零比无穷大近,所以舍入结果就是最大值本身。其他舍入模式(比如向正无穷舍入的 RU)会跳过最大值直接到+∞。
这一个特性引发了连锁删除。RZ 不会产生无穷大,无穷大永远不会作为运算结果出现。只要输入也没有无穷大,NaN 也就不会产生(加减乘除中 NaN 的唯一自然产生路径是对无穷大做运算,比如 +∞ - ∞ 或 0/0 )。于是无穷大和 NaN 的硬件支持都可以砍掉。
subnormal 也一并砍了,硬件代价远超收益。
小贴士 。subnormal 的代价和收益——bfloat16 尾数 7 位,subnormal 的正值总共
2^7 - 1 = 127个(全零编码是 0,不是 subnormal),正负加起来 254 个值。收益是 gradual underflow,填平 0 和最小正规数之间的空隙,保证x≠y ⇒ x-y≠0。代价是要多一套处理隐含位为 0 的逻辑,归一化移位器要更宽,边界条件检测要更复杂——面积变大,关键路径变长,频率被拖慢。为了 254 个极少用到的值花这些硬件,不值得。
最终结果是 1 位符号、8 位指数、7 位尾数,只做向零舍入,没有无穷大、没有 NaN、没有 subnormal。
这里的关键洞察比「砍功能省硬件」更深。 你不仅不需要 IEEE 的全部功能,在很多场景下,带着全部功能反而是错误的选择 。IEEE 754 是为通用 CPU 之间的可移植性设计的,每支持一种舍入模式就多一组逻辑门,每兼容一种特殊值关键路径就长一截。如果你的硬件不需要跟外部对齐结果,这些全是白花的面积和功耗,除了拖慢芯片频率没有任何好处。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。