(图片来源:Ken Shirriff)
硬件历史学家和逆向工程专家Ken Shirriff最近揭示了Intel原始奔腾芯片中引发“FDIV错误”的具体晶体管位置,这一错误在1994年导致了高达4.75亿美元的召回事件。在他的Mastodon帖子中,Shirriff深入探讨了包含错误除法表的PLA(可编程逻辑阵列),追溯到了30年前Intel首次重大失败的根源。
上图展示的是原始奔腾CPU芯片的照片,这是Intel基于P5架构的首款CPU,助力该公司成为家喻户晓的品牌。奔腾采用800纳米工艺制造,芯片照片通过拼接显微镜摄影技术获得。该芯片内含310万个晶体管,在显微镜下,晶体管网格清晰可见,并能识别芯片上各模块的功能。相比之下,如今的处理器拥有数十亿个晶体管,几乎无法解读。
导致FDIV错误的数学偏差源于PLA中的计算失误。奔腾的浮点运算单元得益于SRT除法算法,速度远超当时的其他芯片。SRT算法能以每时钟周期两个比特的速度进行计算,而奔腾的前身则只能达到每时钟周期一个比特。为了实现这一速度,SRT算法需要在芯片上设置一个包含2048个单元的表,以紧凑的112行列出-2、-1、0、1和2的值,这些值通过晶体管的有无来表示。这原本是一个出色的策略,但存在一个缺陷:表中有5个条目缺少了关键的晶体管,导致默认值为0而非正确的“2”。
这些错误的条目会在浮点计算中引发偏差,但当时对这一偏差的罕见性存在争议。在教授Thomas Nicely发现后,Intel最初认为FDIV错误并不严重,声称它每27000年才会发生一次。然而,IBM则指出它每24天就会发生一次,并停止了奔腾的销售。面对巨大的经济压力,Intel最终召回了所有受影响的芯片,损失了4.75亿美元(欲了解更多历史背景,请阅读我们关于此事件的30周年纪念文章)。
Shirriff表示:“聪明的数学家在1995年通过研究错误模式,找出了奔腾的除法算法和缺失的条目。但我现在可以在硅芯片上确认这一点。”更重要的是,Shirriff的调查发现,缺失的数据点实际上有16个,比最初认为的5个多出11个。这额外的11个数据点未引发错误“纯属侥幸”。Intel后来通过将所有未使用的条目填充为2来修复了这个问题,这一快速有效的解决方案为未来的奔腾修订版节省了大量空间。
要了解有关奔腾芯片及其错误的更详细描述,请查看Shirriff的完整Mastodon帖子。在未来几天内,Shirriff承诺将在他的博客上进一步深入探讨他的调查结果,这可能包括探讨是否可以通过物理编辑PLA来修复受错误影响的奔腾芯片。