1993年 ,道数CPU 巨头Intel推出了Pentium处理器。学题 新的让芯品牌顺利地摆脱了AMD等公司对286
,386
,片巨486等数字系列的头亏品牌“抄袭”,树立了全新的亿美领先者的形象。 再加上90年代初斥巨资成功推进的道数Intel Inside计划, Intel 成功地从一家主要向电脑制造商供货的学题公司,转变成一家直接面向消费者的让芯品牌。 不知道哪位天才把Pentium翻译成霸气的免费模板片巨“奔腾”
,真是头亏惊艳全场的神来之笔。 新产品,亿美新品牌,道数Intel 可谓意气风发
,学题准备一统天下 。让芯 但谁也没想到的是
,这个被寄予厚望的CPU内部居然隐藏着一个Bug! Bug被发现的过程也颇为传奇,我们得从数学上的建站模板一个概念说起。 早在希腊时代,欧几里得就已经证明质数有无穷多个,并且数字越大 ,质数分布得越稀疏。 神奇的是 ,尽管分布得很稀疏,但只要出现一个质数 ,就可以在附近找到另外一个
, 例如41 和 43、101 和 103 、10007 和 10009,他们之间相差都是2。高防服务器 数学家给这些相差为2的连续质数起了一个名称:孪生质数。 1919年
,挪威数学家 Viggo Brun证明了一件有趣的事情 ,就算有无穷多的孪生质数
,它们倒数的和会收敛于一个常数
,这个常数被称为“布朗常数”
。 但是让数学家头疼的是:他们不知道这个布朗常数是不是无理数。服务器租用 随着计算机的出现,有些人就想到一个招数
:用计算机强大的算力,暴力求解。 美国 Lynchburg College 的数学教授Thomas Nicely就是其中的一员
,他的实验室恰巧装备了新的奔腾计算机。 严谨的Nicely为了防止算错,用了两种算法做双保险,如果答案不同,亿华云肯定是某个地方出了问题。 Nicely满怀希望地开始了计算 ,可是结果让他失望:两种算法的结果真的不一样! 深入研究以后,Nicely发现:824 633 702 441和824 633 702 443这两个孪生质数
,它们的倒数的小数点后的第10位被算错了
! Nicely换了一台老旧的486电脑来计算
,答案算对了
。源码库 他再用奔腾电脑来重新计算 ,错误重现 。 到底是自己的程序写错了?还是电脑的问题? Nicely开始做排除法
,排除自己代码的错误,Borland编译器的错误,芯片组的错误 ,花了整整4个月的时间
,终于找到了Bug的起源地:奔腾CPU 。 1994年10月24号,Nicely打电话给Intel的技术支持部门,告知他们这个问题
,Intel说几天内就会有回复
,但是从此杳无音信。 原因很简单,Intel早在1994年6月就知道了这个问题:浮点除法运算(FDIV)出错。 奔腾CPU的FDIV引入了一种全新的、快速的实现方法 ,使用了一个2048项的硬件查找表
,但是由于意外,有5个值没有被正确地设置,他们本应该是2,但是却设置成了0。 这个Bug只有在高精度计算的时候才会被触发,普通用户很难碰到
,Byte杂志估计
,出错的概率是90亿分之一。 既然影响不大
,Intel的选择是:隐瞒
,悄悄修复,不公布任何细节。 毕竟已经售出几百万片CPU了,大规模召回损失太大
。 又不是不能用
! 收不到回音的Nicely很不爽,10月30号,他开始给一些IT著名人士和杂志发邮件
,包括Byte杂志
,PC Week,InfoWorld,PC Magazine
。 这件事情很快在网络上发酵
,一大批牛人开始了问题定位的接力赛: 第一棒选手是上面提到的Nicely
。 第二棒则是挪威的Terje Mathis
,他很快确认了Nicely的问题
,并且写了一个简单的汇编测试程序,发到了comp.sys.intel新闻组中(没错,那时候别说社交网络了
,就连BBS还不流行) 第三棒是德国的Andreas Kaiser ,他找到了24个数字
,它们的倒数在奔腾CPU只能得到单精度的结果。 第四棒是一位设计FPU(floating-point-unit)的专业人士,加州Vitesse半导体设计师Tim Coe。 他根据24个数字的线索 ,推测出奔腾CPU采用了基数为 4 的 SRT 算法
,每个时钟周期可以生成两位的商,使得速度比原来快两倍。 事实也确实如此
,内部专业人士的确厉害
。 到了第五棒
,一个超级大牛出现了,MATLAB之父:Cleve Moler Moler总结了之前的数据,找到了Bug的规律。 可见犯了错误以后,想捂是捂不住的
,你越想捂,这世界上越有人要把你扒个底朝天。 但是到目前为止,Intel奔腾这个硬件Bug还主要在科技圈中转悠,破圈还需要等待一个重要时刻 。 1994年11月24号
,JPL(喷气推进实验室,钱学森是重要创始人)有两名工程师得知了这个Bug,建议实验室停购奔腾电脑 。 CNN的记者史蒂夫·杨听说了JPL的事情
,嗅觉灵敏的他立刻联系Moler,进行采访,当天晚上JPL的新闻和Moler的采访就在电视台播放
,纽约时报
、波士顿环球报等大肆报道,文章铺天盖地而来。 奔腾CPU这个本来很难出现的Bug一下子成为街头巷尾的热议话题 。 在媒体的重压之下
,Intel终于承认了浮点计算的漏洞,但依然嘴硬 ,它声称并不严重,并且只给那些能证明自己受到影响的用户更换CPU 。 这种想蒙混过关的处理态度引发众怒,动摇了消费者对Intel CPU的信心 。 其他厂商也顺时而动
,IBM暂停销售装有Intel CPU的个人电脑 ,导致Intel股票大幅下跌。 1994年12月,撑不住的Intel终于宣布:召回所有有缺陷的处理器
。 这也是历史上第一次全面召回计算机芯片
。 Intel为此付出的代价是:4.75亿美元
,名誉的损失更是难以估量 。 故事到此并没有结束 。 照理说硬件出了问题
,无法修改,只能替换。 但是不要忘了我们刚提到的那一群天才 ,MATLAB之父Cleve Moler ,Tim Coe,阿贡国家实验室的 Peter Tang 以及来英特尔的几位工程师 ,他们通力合作 ,在12月5号居然开发出了一个非常巧妙的软件修复办法。 细节这里就不赘述了
,大概是
:在特定情况下
,将被除数和除数都乘以15/16,就可以进入安全状态。 这个修复办法被发到新闻组中 ,让所有人免费使用 。 精明的Cleve Moler让公司发布了一个可以检测和纠正除法错误的MATLAB版本
,并且立刻发了一个新闻稿《MathWorks修复了Intel奔腾浮点数Bug》
。 就在奔腾的Bug闹得沸沸扬扬
,全国皆知的时候,新闻稿出现在了美国各大媒体的传真机上。 Cleve Moler成功地实施了一次完美营销
,这一年 ,他的公司MathWorks只是一家不到250人的小公司,随后便走上了快车道,成为这一领域的巨头
。 https://dl.acm.org/doi/pdf/10.1145/3386331《A History of MATLAB》 https://buzzorange.com/techorange/2019/11/08/intel-pentium-bug/ https://faculty.lynchburg.edu/~nicely/pentbug/pentbug.html https://en.wikipedia.org/wiki/Pentium https://en.wikipedia.org/wiki/Pentium_FDIV_bug https://en.wikipedia.org/wiki/Intel#Intel_Inside





