【发布时间】:2016-08-15 09:06:41
【问题描述】:
Denormals 的表现严重低于正常水平,大约是正常水平的 100 倍。这经常导致unexpected 软件problems。
我很好奇,从 CPU 架构的角度来看,为什么非规范化必须那么慢?缺乏表现是他们不幸的代表所固有的吗?或者 CPU 架构师在(错误地)假设非规范化无关紧要的情况下忽略了它们以降低硬件成本?
在前一种情况下,如果非规范化本质上对硬件不友好,是否存在已知的非 IEEE-754 浮点表示,它们在接近零时也是无间隙的,但更便于硬件实现?
【问题讨论】:
-
非规范化需要额外的规范化(输入)和非规范化(输出)步骤。一些处理器架构会增加额外的硬件(移位器和控制逻辑)来全速处理这个问题,例如NVIDIA GPU,其他处理器架构通过微码的内部异常处理来处理这个问题,例如大多数 x86 CPU,这可以节省硬件但速度要慢得多。后一种方法的理由是用最少的硬件支出正确处理频繁情况和不频繁情况(例如无穷大、NaN、非正规)。
-
@njuffa:为什么不回答这个问题?
-
E.M. Schwarz、M. Schmookler 和 S.D.Trong,“非规范化数字的硬件实现”。在:Proceedings 16th IEEE Symposium on Computer Arithmetic,2003 年 6 月 15 日,第 70-78 页。 (online version)
-
@PeterCordes 请注意,我说的是“大多数 x86 CPU”。它甚至可能在同一个处理器中有所不同:最初的 AMD Athlon 处理器在读取路径中具有对非规范化的硬件支持(通过动态延长管道;对此有专利),但存储路径中的非规范化微码异常处理程序(到避免非正规支持的开销在没有非正规的常见情况下减慢存储加载转发路径)。
-
处理涉及零、无穷大和 NaN 的特殊情况通常由特殊硬件执行(例如,在各种 AMD x86 处理器上),并且与处理非正规的问题略有不同,因为硬件开销可以保持相当小并涉及通常不会影响管道长度的并行硬件路径,而非规范处理通常会影响管道长度(增加长度)。
标签: floating-point cpu-architecture