DoSERV分析12月4日国际报道:一些读者似乎喜欢我们的杂志文章涉及的技术越多越好。其中一项关注热点就是涉及当前CPU和GPU的基本浮点运算能力。
上世纪80年代早期,英特尔推出第一款用于8086芯片的浮点运算协同处理器8087。当时那款产品的运行速度最高达到8MHz,而仅仅增加芯片数量就能让运行速度提高几十倍,那时要达到1亿次浮点运算简直是幻想,这给具有某些灾难性特点的X86架构带来一些重要信息和发展。
更精确的运算…
根据IEEE 754标准选择32位单精度或64位双精度浮点运算,采用所有的取整与校正运算单元,这在芯片内部是一次大规模加法运算,15位精度以及指数范围在+-300以上的运算,这对于数学家来说也是极大的运算量。在这之上,英特尔还定义了80位扩展精度,这也是IEEE 754的一部分,直到现在还是由所有的80×87算术逻辑单元和寄存器进行全面支持。
诚然,这种80位模式只扩展了一些精度位,而且也确实是巨大的指数级增长。但长期以来,只有X86以及经过长期发展的摩托罗拉680×0系列,在它们的浮点运算单元中进行了硬件化。
超快速64位RISC(精简指令集计算机),例如Alpha、MIPS或功能强大有64位硬件浮点运算功能的计算机是浮点运算的极限。SSE1-2-3-4也是,目前还有AMD的前一代产品SSE 3D。
爆炸性浮点运算问题…
有趣的是,浮点运算精度、取整、校正、除法和其他复杂部件,如果有时不注意会产生可怕的后果。是否还记得2006年6月,法国的Ariane 5号在圭亚那发射的情况?这艘火箭在发射升空后很快爆炸,损失高达10亿美元。
位于伯克利的加利福尼亚大学的教授William Kahan是8087的合作开发者,8087芯片集成了4万只硅晶体,在当时就能在硬件上集成数量庞大的完整数学程序库 — 降低了火箭软件中由于编程语言错误处理浮点运算除法而导致毁灭性崩溃的可能性。这就是当时的事情真相。
在发射过程中,感应器对加速度进行报告,加速度如此巨大,以致引发了软件中浮点数到整数的一次转换溢出,从而导致对火箭在发射台上的惯性制导进行重新校准。该软件触发了一次系统诊断,将其错误数据转存到一块内存区域,该内存区域是火箭发动机制导程序使用的。同时,控制权切换到一台备用计算机上,很不幸,该备用计算机恰恰依靠同样的数据。
当需要重大紧急校正时,这些程序被错误解释了,火箭发动机旋转速度达到了底座的极限。紧接着,火箭就爆炸变成了一团火球。依据IEEE 754浮点运算标准的默认策略,发生数据溢出时,重新校准程序会发送一个非法结果,该结果会被发动机制导程序所忽略,而Ariane 5号会按照预定程序进行工作 — 或者可能法国想要定义他们自己"独特的"浮点运算标准?
无论如何
无论如何,经过许多年的"争论"之后,新的IEEE 754R标准目前已经最终确定,这种争论是在敌对阵营中进行混战。除了小数以及对已有数据的多次调整,还增加了一个非常重要的部分,就是标准128位四倍精度浮点运算单元,这是我特别欣赏的一种功能。
具有最高达到33位精度和很高指数的128位浮点运算,可以容纳巨大无比的数字,简直可以达到宇宙原子的数量,然而它对电子表格或者财务模型起不了多大作用。关于模拟炸弹爆炸时的超细粉末估算的非常精确的资料可以提供任何数据,想象一下未来的物理学游戏,当炸弹拆毁一座建筑物时,砖块和混凝土块根据自然法则分别落下,精确度达到毫米级!
我们距离这样的技术还有多远?该标准已经通过批准。硬件的情况如何?在英特尔和AMD最近推出的CPU中,SSE3/4运算单元有128位的执行单元、寄存器和数据通路,已经达到128位宽度。因此,在这些计算机中要使用至少是"硬件辅助型软件"运行128位浮点运算,已经不太难了,即使有一些性能损耗。当然,IBM的Power6+预期也会有这种功能,这些芯片原本就可以进行高精度运算。
即将推出的ATI R700和Nvidia 9000系列GPU的高端产品D9E,预期也都会有真正的64位IEEE 754 DP浮点运算功能,而且,很可能也会推出支持QP浮点运算功能的硬件。毕竟,这些数量庞大的64位执行单元也可以集成在一起处理128位数值。
最后,如果AMD在这种情况下能维持到2009年底的话,将在明年推出的Nehalem处理器,以及一年后推出的Bulldozer 系列CPU都将包括完整的IEEE 754R规范,包括128位二进制QP浮点运算功能。
或者,至少我希望如此,而读者会持什么看法?目前会不会是在"主流"X86计算机上增加128位浮点运算功能的最佳时机?