算素数算出个召回:一位数学教授,让英特尔赔了 4.75 亿美元
配图:AI 生成的概念示意图,非论文原图、真实现场或实验数据。
TL;DR:1994 年,林奇堡学院的数学教授 Thomas Nicely 在算孪生素数时发现,奔腾处理器的浮点除法偶尔会算错。英特尔起初只肯给“有科学需求”的用户换芯片,在舆论压力下于当年 12 月改为按需全面更换,并在 1995 年 1 月宣布计提 4.75 亿美元税前费用。需要说明的是:这个缺陷触发概率很低,并非每次除法都出错。
这是三十多年前的旧事,发生在 1994 年。
教授的数字对不上
Nicely 当时在研究孪生素数。据维基百科的梳理,他在 1994 年 6 月 13 日注意到计算结果前后不一致,之后花了几个月排除其他原因,10 月 19 日确认问题出在处理器上,10 月 24 日向英特尔报告。
一个广为流传的检验例子是:4195835 除以 3145727,正确结果约为 1.333820449,而有缺陷的奔腾算出来相当于 4195579 除以 3145727,约 1.333739069,第四位小数就开始偏了。
错在一张表里
奔腾的除法用查找表加速,这张表的可编码单元有 2048 个,其中 1066 个应当填入数值。有 5 个本该填 +2 的单元里放的却是 0。于是只有特定组合的操作数会触发错误:最坏情况下误差出现在第五位有效数字,通常在第九、十位才出现。对多数用户几乎无感,对做科学计算的人却是隐患。
从“几万年一次”到全面召回
据多个来源转述,英特尔其实在 1994 年 6 月前后就已知晓问题并悄悄修改了后续生产,但没有公开,也没有召回。Nicely 的发现 11 月 7 日见诸《电子工程专辑》,11 月 22 日 CNN 也进行了报道。英特尔的最初说法是,普通用户大约要隔几万年才会撞上一次(常被引用的数字是 27000 年),只给能证明有需要的用户换芯片。IBM 随后宣布暂停销售搭载奔腾的电脑,不过也有业内人士怀疑其动机,因为 IBM 自己做 PowerPC 芯片。
12 月 20 日,英特尔改口:凡用户要求,一律更换。这通常被称为芯片行业的首次全面召回。1995 年 1 月 17 日,公司宣布计提 4.75 亿美元税前费用,用于应对此事。
为什么值得记住
这件事的荒诞之处在于:缺陷本身很小,真正造成损失的是回应方式。把“概率很低”当作“不必处理”,把用户的算术结果当作“你用得不对”,结果让一个技术问题变成了信任危机。此后,“发现问题后及时公开并修复”成了硬件厂商的常识。
来源: