7

一道数学题,让芯片巨头亏了5亿美金!

 2 years ago
source link: https://server.51cto.com/article/714740.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一道数学题,让芯片巨头亏了5亿美金!-51CTO.COM

一道数学题,让芯片巨头亏了5亿美金!
作者:码农翻身刘欣 2022-07-26 01:11:09
新的品牌顺利地摆脱了AMD等公司对286,386,486等数字系列的品牌“抄袭”,树立了全新的领先者的形象。

​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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK