1993年,CPU 巨頭Intel推出了Pentium處理器。
新的品牌順利地?cái)[脫了AMD等公司對(duì)286,386,486等數(shù)字系列的品牌“抄襲”,樹(shù)立了全新的領(lǐng)先者的形象。
再加上90年代初斥巨資成功推進(jìn)的Intel Inside計(jì)劃, Intel 成功地從一家主要向電腦制造商供貨的公司,轉(zhuǎn)變成一家直接面向消費(fèi)者的品牌。
不知道哪位天才把Pentium翻譯成霸氣的“奔騰”,真是驚艷全場(chǎng)的神來(lái)之筆。
新產(chǎn)品,新品牌,Intel 可謂意氣風(fēng)發(fā),準(zhǔn)備一統(tǒng)天下。
但誰(shuí)也沒(méi)想到的是,這個(gè)被寄予厚望的CPU內(nèi)部居然隱藏著一個(gè)Bug!
1
Bug被發(fā)現(xiàn)的過(guò)程也頗為傳奇,我們得從數(shù)學(xué)上的一個(gè)概念說(shuō)起。
早在希臘時(shí)代,歐幾里得就已經(jīng)證明質(zhì)數(shù)有無(wú)窮多個(gè),并且數(shù)字越大,質(zhì)數(shù)分布得越稀疏。
神奇的是,盡管分布得很稀疏,但只要出現(xiàn)一個(gè)質(zhì)數(shù),就可以在附近找到另外一個(gè), 例如41 和 43、101 和 103、10007 和 10009,他們之間相差都是2。
數(shù)學(xué)家給這些相差為2的連續(xù)質(zhì)數(shù)起了一個(gè)名稱(chēng):孿生質(zhì)數(shù)。
1919年,挪威數(shù)學(xué)家 Viggo Brun證明了一件有趣的事情,就算有無(wú)窮多的孿生質(zhì)數(shù),它們倒數(shù)的和會(huì)收斂于一個(gè)常數(shù),這個(gè)常數(shù)被稱(chēng)為“布朗常數(shù)”。
但是讓數(shù)學(xué)家頭疼的是:他們不知道這個(gè)布朗常數(shù)是不是無(wú)理數(shù)。
隨著計(jì)算機(jī)的出現(xiàn),有些人就想到一個(gè)招數(shù):用計(jì)算機(jī)強(qiáng)大的算力,暴力求解。
美國(guó) Lynchburg College 的數(shù)學(xué)教授Thomas Nicely就是其中的一員,他的實(shí)驗(yàn)室恰巧裝備了新的奔騰計(jì)算機(jī)。
嚴(yán)謹(jǐn)?shù)腘icely為了防止算錯(cuò),用了兩種算法做雙保險(xiǎn),如果答案不同,肯定是某個(gè)地方出了問(wèn)題。
Nicely滿懷希望地開(kāi)始了計(jì)算,可是結(jié)果讓他失望:兩種算法的結(jié)果真的不一樣!
深入研究以后,Nicely發(fā)現(xiàn):824 633 702 441和824 633 702 443這兩個(gè)孿生質(zhì)數(shù),它們的倒數(shù)的小數(shù)點(diǎn)后的第10位被算錯(cuò)了!
Nicely換了一臺(tái)老舊的486電腦來(lái)計(jì)算,答案算對(duì)了。
他再用奔騰電腦來(lái)重新計(jì)算,錯(cuò)誤重現(xiàn)。
到底是自己的程序?qū)戝e(cuò)了?還是電腦的問(wèn)題?
Nicely開(kāi)始做排除法,排除自己代碼的錯(cuò)誤,Borland編譯器的錯(cuò)誤,芯片組的錯(cuò)誤,花了整整4個(gè)月的時(shí)間,終于找到了Bug的起源地:奔騰CPU。
2
1994年10月24號(hào),Nicely打電話給Intel的技術(shù)支持部門(mén),告知他們這個(gè)問(wèn)題,Intel說(shuō)幾天內(nèi)就會(huì)有回復(fù),但是從此杳無(wú)音信。
原因很簡(jiǎn)單,Intel早在1994年6月就知道了這個(gè)問(wèn)題:浮點(diǎn)除法運(yùn)算(FDIV)出錯(cuò)。
奔騰CPU的FDIV引入了一種全新的、快速的實(shí)現(xiàn)方法,使用了一個(gè)2048項(xiàng)的硬件查找表,但是由于意外,有5個(gè)值沒(méi)有被正確地設(shè)置,他們本應(yīng)該是2,但是卻設(shè)置成了0。
這個(gè)Bug只有在高精度計(jì)算的時(shí)候才會(huì)被觸發(fā),普通用戶很難碰到,Byte雜志估計(jì),出錯(cuò)的概率是90億分之一。
既然影響不大,Intel的選擇是:隱瞞,悄悄修復(fù),不公布任何細(xì)節(jié)。
畢竟已經(jīng)售出幾百萬(wàn)片CPU了,大規(guī)模召回?fù)p失太大。
又不是不能用!
3
收不到回音的Nicely很不爽,10月30號(hào),他開(kāi)始給一些IT著名人士和雜志發(fā)郵件,包括Byte雜志,PC Week,InfoWorld,PC Magazine。
這件事情很快在網(wǎng)絡(luò)上發(fā)酵,一大批牛人開(kāi)始了問(wèn)題定位的接力賽:
第一棒選手是上面提到的Nicely。
第二棒則是挪威的Terje Mathis,他很快確認(rèn)了Nicely的問(wèn)題,并且寫(xiě)了一個(gè)簡(jiǎn)單的匯編測(cè)試程序,發(fā)到了comp.sys.intel新聞組中(沒(méi)錯(cuò),那時(shí)候別說(shuō)社交網(wǎng)絡(luò)了,就連BBS還不流行)
第三棒是德國(guó)的Andreas Kaiser ,他找到了24個(gè)數(shù)字,它們的倒數(shù)在奔騰CPU只能得到單精度的結(jié)果。
第四棒是一位設(shè)計(jì)FPU(floating-point-unit)的專(zhuān)業(yè)人士,加州Vitesse半導(dǎo)體設(shè)計(jì)師Tim Coe。
他根據(jù)24個(gè)數(shù)字的線索,推測(cè)出奔騰CPU采用了基數(shù)為 4 的 SRT 算法,每個(gè)時(shí)鐘周期可以生成兩位的商,使得速度比原來(lái)快兩倍。
事實(shí)也確實(shí)如此,內(nèi)部專(zhuān)業(yè)人士的確厲害。
到了第五棒,一個(gè)超級(jí)大牛出現(xiàn)了,MATLAB之父:Cleve Moler
Moler總結(jié)了之前的數(shù)據(jù),找到了Bug的規(guī)律。
可見(jiàn)犯了錯(cuò)誤以后,想捂是捂不住的,你越想捂,這世界上越有人要把你扒個(gè)底朝天。
但是到目前為止,Intel奔騰這個(gè)硬件Bug還主要在科技圈中轉(zhuǎn)悠,破圈還需要等待一個(gè)重要時(shí)刻。
4
1994年11月24號(hào),JPL(噴氣推進(jìn)實(shí)驗(yàn)室,錢(qián)學(xué)森是重要?jiǎng)?chuàng)始人)有兩名工程師得知了這個(gè)Bug,建議實(shí)驗(yàn)室停購(gòu)奔騰電腦。
CNN的記者史蒂夫·楊聽(tīng)說(shuō)了JPL的事情,嗅覺(jué)靈敏的他立刻聯(lián)系Moler,進(jìn)行采訪,當(dāng)天晚上JPL的新聞和Moler的采訪就在電視臺(tái)播放,紐約時(shí)報(bào)、波士頓環(huán)球報(bào)等大肆報(bào)道,文章鋪天蓋地而來(lái)。
奔騰CPU這個(gè)本來(lái)很難出現(xiàn)的Bug一下子成為街頭巷尾的熱議話題。
在媒體的重壓之下,Intel終于承認(rèn)了浮點(diǎn)計(jì)算的漏洞,但依然嘴硬,它聲稱(chēng)并不嚴(yán)重,并且只給那些能證明自己受到影響的用戶更換CPU。
這種想蒙混過(guò)關(guān)的處理態(tài)度引發(fā)眾怒,動(dòng)搖了消費(fèi)者對(duì)Intel CPU的信心。
其他廠商也順時(shí)而動(dòng),IBM暫停銷(xiāo)售裝有Intel CPU的個(gè)人電腦,導(dǎo)致Intel股票大幅下跌。
1994年12月,撐不住的Intel終于宣布:召回所有有缺陷的處理器。
這也是歷史上第一次全面召回計(jì)算機(jī)芯片。
Intel為此付出的代價(jià)是:4.75億美元,名譽(yù)的損失更是難以估量。
5
故事到此并沒(méi)有結(jié)束。
照理說(shuō)硬件出了問(wèn)題,無(wú)法修改,只能替換。
但是不要忘了我們剛提到的那一群天才,MATLAB之父Cleve Moler ,Tim Coe,阿貢國(guó)家實(shí)驗(yàn)室的 Peter Tang 以及來(lái)英特爾的幾位工程師,他們通力合作,在12月5號(hào)居然開(kāi)發(fā)出了一個(gè)非常巧妙的軟件修復(fù)辦法。
細(xì)節(jié)這里就不贅述了,大概是:在特定情況下,將被除數(shù)和除數(shù)都乘以15/16,就可以進(jìn)入安全狀態(tài)。
這個(gè)修復(fù)辦法被發(fā)到新聞組中,讓所有人免費(fèi)使用。
精明的Cleve Moler讓公司發(fā)布了一個(gè)可以檢測(cè)和糾正除法錯(cuò)誤的MATLAB版本,并且立刻發(fā)了一個(gè)新聞稿《MathWorks修復(fù)了Intel奔騰浮點(diǎn)數(shù)Bug》。
就在奔騰的Bug鬧得沸沸揚(yáng)揚(yáng),全國(guó)知的時(shí)候,新聞稿出現(xiàn)在了美國(guó)各大媒體的傳真機(jī)上。
Cleve Moler成功地實(shí)施了一次完美營(yíng)銷(xiāo),這一年,他的公司MathWorks只是一家不到250人的小公司,隨后便走上了快車(chē)道,成為這一領(lǐng)域的巨頭。