這個超級貴的計算機bug,是如何讓英特爾損失數(shù)十億美元的
在過去的幾十年,英特爾一直是世界上非常具有影響力的處理器芯片制造商。
不過追溯到 20 世紀 90 年代,英特爾竟因為浮點故障而損失數(shù)十億美元。
一位數(shù)學家發(fā)現(xiàn)了一個威脅英特爾整個處理器線程的方程式,而這恰恰是在計算成為主流之前。接下來讓我們回顧下浮點故障,這個使奔騰變成了一個笑柄的故障。這篇報道最先出現(xiàn)在《Tedium》上。1919
挪威數(shù)學家 Viggo Brun 證明了雙素數(shù)(相差為 2 的兩個素數(shù) ,如 3 和5)的倒數(shù)值之和收斂為有限值,即稱為布倫常數(shù)。根據(jù)前林奇堡大學數(shù)學系教授 Thomas Nicely 的說法,通過計算所有雙素數(shù)到 10 的 14 次冪時,常數(shù)約為 1.902160578。Nicely 在我們的故事中扮演了一個重要角色。
英特爾的奔騰處理器問題像是由錯誤的人在海里撈針頭造成的
為了找到這個故事的根源,讓我們來玩一個邏輯練習:
There is somethIng wrong with this sentence.
當輸入上面的句子時,犯了什么錯誤嗎?明顯嗎?會影響你的理解嗎?
你可能注意到了:在"somethIng"中的大寫字母"I"。這或許是我們生活中會犯的錯誤?,F(xiàn)在,想象一下,如果這是這整個網(wǎng)站上唯一的拼寫或語法錯誤(雖然并不是這樣)。也許,你復制了這個網(wǎng)站幾次,糾正了"I",所以在這個詞上它沒有大寫。但是原網(wǎng)站的版本上,該錯誤仍然存在。現(xiàn)在想象一下,如果數(shù)以百萬計的人搜索我在網(wǎng)站上分享的每一個短語,比較多的人發(fā)現(xiàn)了這一個錯誤,而且這些人中有一個是有影響力的編輯。
雖然這個錯誤非常微小,但是足以威脅一個作家的聲譽。這與 1994 年 10 月 Nicely 拿到新的奔騰處理器后,不知不覺中發(fā)現(xiàn)的錯誤是相同的情況。在尋找布倫常數(shù)時,他使用英特爾處理器及其浮點功能,意識到處理器給出的答案有點偏差。
THOMAS NICELY, 如 1984 的圖所示。圖片:林奇堡大學
對于絕大多數(shù)人來說,這一個小錯誤是不會被注意到的。畢竟,奔騰的這一錯誤不是世界末日。但是對于 Nicely 來說是一個例外,因為這破壞了他的研究,且在他的等式中創(chuàng)建了很多問題。在 1994 年的 CNN 的一次敘述 Usenet 的采訪中,Nicely 講述了這個傳奇的故事:
我一直從事純數(shù)學方面的研究;這涉及到雙素數(shù)的運算,并且在計算過程中會執(zhí)行很長時間的除法運算。我發(fā)現(xiàn)一個異常的點,花費了數(shù)月去追蹤它。事實證明了源頭是最不可能被懷疑的對象:芯片。
Nicely 手中的 60 MHz 奔騰芯片是罪魁禍首,他花了幾個月的時間才正確診斷出該問題要歸結為于 CPU。對于 Nicely 和其他數(shù)學家來說,去解決這樣的問題是一個讓人非常頭痛的事情。但即使是像這樣一個簡單的錯誤,也足以損害備受矚目的奔騰芯片在極其技術性的數(shù)學領域的聲譽。
1994 年 10 月 30 日,Nicely 在 CompuServe 上報道了這個錯誤之后,它成為第一批真正通過互聯(lián)網(wǎng)傳播的故事之一。僅僅幾天后,有人在 Usenet 中 comp.sys.intel 組上發(fā)布了關于這個問題的消息,確認了浮點錯誤。從那開始,這篇報道被工程行業(yè)出版物 EE Times 在新聞中報道后,這個故事便傳遍各地。挪威程序員 Terje Mathisen 寫道:“在我看來,在 60~90MHz 型號的奔騰只是將浮點分割進行到單精度。”
從此,這個故事開始引起工程和數(shù)學空間的注意。但真正的問題可能是英特爾在應對此問題時犯了一個更大的錯誤,一個商業(yè)性的錯誤。
到 11 月底和 12 月初,這個故事開始引起大家的注意,爆炸性地成為 1994 年最大的技術故事之一。這一年,互聯(lián)網(wǎng)開始第一次進入主流領域,雖然以稍微有些尷尬的方式。但值得注意的是,雖然這一問題出在芯片設計錯誤,但真正的問題出在因特爾處理。簡單來說,就是英特爾最好的用戶沒有得到應有的尊重。
1913
數(shù)學家ÉmileBorel 首次提出無限猴子定理的那一年——這個著名的理論認為,如果一百萬只猴子每天用一百萬臺打字機打字 10 個小時,他們最終會寫出一份偉大的文學作品。在許多意義上,Nicely 偶然發(fā)現(xiàn)的問題是學術領域上同樣的事情。
英特爾奔騰芯片。圖片:KRZYSZTOF BURGHARDT /Wi-Ki 共享
這一故事對英特爾照成影響的真正原因歸結于英特爾的反應
對于英特爾這一問題不在于問題本身,而在于如何處理這一問題的出現(xiàn)?;氐街疤岬降陌咐?,如果你收到一封來自一位非常牛的編輯的電子郵件,告訴你在整個網(wǎng)站中不小心誤寫了一個大寫字母,你會有什么反應?
可能你會悄悄地找到這一錯誤,且修正它。但英特爾沒有做到這一點。就像報紙上的修正一樣,芯片中的錯誤基本上是決定性的。(嗯,除非你使用類似可編程數(shù)組的東西。)他們能夠做到的最好方式就是在將來的版本中消除這一錯誤。雖然軟件可以在一定程度上緩解這一問題,但如果芯片出現(xiàn)問題,也無法完全修正它,除非替換芯片。說白了,浮點誤差雖然糟糕,但宏觀上看是微小的。
這就像你擁有一臺計算器,在你使用計算器的整段時間里,它都會給你一個錯誤答案。根據(jù)現(xiàn)代處理器對比,最近的處理器都受到 Meltdown 和 Spectre 的困擾,(在過去 20 年中發(fā)布的大多數(shù) Intel,Power Architecture 和 ARM 芯片的設計中都包含了前者),這些缺陷總體上的破壞性非常大。
它們不是理論上的問題,它們是基本的安全風險。修復這兩個缺陷所發(fā)現(xiàn)問題的解決方案意味著硬件和軟件制造商必須關閉處理器的一些功能,從而導致人們的計算機運行速度變慢。在某些使用(如云計算)中,這樣的更改實際上意味著使用同一處理器將花費您更多的錢和時間來執(zhí)行相同的工作。除了重復性損害之外,英特爾仍然試圖修復這些缺陷。
那么又該如何看待浮點錯誤呢?發(fā)現(xiàn)它的學者 Thomas Nicely 認為,雖然這對他來說的確是個問題,但是當時的計算機處理器非常復雜。這意味著如果他沒有特意探索的話,這個問題可能不會被人發(fā)現(xiàn)。“目前這一代的微型處理器已經(jīng)變得非常復雜,已經(jīng)不可能完全調試一個處理器了。”他在 1995 年初告訴《PC 雜志》。但英特爾當然可以把事情處理得更好。正如數(shù)學家和 MATLAB 開發(fā)人員 Cleve Moler 在 2013 年所回憶的那樣,英特爾最初給客戶的回應有很多需要改進的地方。
按照 Moler 的說法,以下是客戶支持機構發(fā)給客戶的內(nèi)容:
最近網(wǎng)上有很多關于奔騰處理器浮點缺陷的交流。對于大多數(shù)的用戶來說,這不是問題。
事情是這樣的,英特爾檢測到奔騰處理器的除法運算精度存在一個微妙的缺陷。對于極少數(shù)情況(九十億次中出現(xiàn)一回),結果的精度會降低。英特爾在對奔騰處理器進行持續(xù)測試的過程中,經(jīng)過幾萬億次浮點運算后,發(fā)現(xiàn)了這個細微的缺陷。英特爾立即對使用浮點單元的最嚴格的技術應用進行了測試,歷時數(shù)月,我們一直未能發(fā)現(xiàn)任何錯誤。事實上,在經(jīng)過大量的測試和數(shù)百萬個基于奔騰處理器的系統(tǒng)的出貨后,據(jù)我們所知,只有一個影響用戶的報告實例。在這個案例中,一位數(shù)學家在做素數(shù)和倒數(shù)的理論分析時,看到小數(shù)點右邊第 9 位的精度降低。
事實上,廣泛的工程測試表明,一個普通的電子表格用戶在每 27000 年的使用過程中可能會遇到一次使得精度降低的細微缺陷?;谶@些經(jīng)驗觀察和我們的大量測試,使用常規(guī)軟件的用戶不會受到影響。如果你有這種質數(shù)生成的精度問題或其他復雜的數(shù)學問題,請撥打 1 800 628-8686(國際)或者 916 356-3551。如果沒有的話,您的基于奔騰處理器的系統(tǒng)不會遇到任何問題。在計算機的使用過程中,一旦出現(xiàn)這樣的情況,英特爾公司將與客戶共同解決。
正如我在上面指出的,英特爾非常容易遇到百萬猴子問題。這段話所強調的問題是,英特爾在 Nicely 伸出援手之前就知道了這件事,并且有點放任自流。這之所以有問題,部分原因是焦點從關心這個問題的技術群體轉移到了不關心它的普通消費者身上。英特爾試圖把所有的壓力放在消費者身上,并在當年推出了英特爾 Inside 品牌活動,以及奔騰芯片的消費者友好(和商標友好)品牌。但在試圖贏得普通觀眾的時候,英特爾似乎暗示它不再認真對待現(xiàn)有的用戶群。
對于那些專注于技術應用程序的人來說,浮點除法的情況造成了不確定性,而英特爾的回應不盡如人意。在 1994 年《華爾街日報》的一篇文章中,噴氣推進實驗室研究員戴夫·貝爾(Dave Bell)明確指出,科學界可能會因為對芯片的困擾停止使用奔騰。
“有很多人做研究,必須站在計算機模擬的基礎上發(fā)表結果,”貝爾說。“也許現(xiàn)在的一個問題會是,‘它是不是在有問題的芯片上做出來的‘?”
已故英特爾首席執(zhí)行官安迪·格羅夫(Andy Grove),他于 2016 年去世。圖片:英特爾免費媒體
最終在 1994 年底的時候,英特爾 CEO 安迪-格羅夫(Andy Grove)在社交媒體 comp.sys.intel 上發(fā)布了一篇回應。這件事情并不順利,尤其是對于像格羅夫這樣的所謂技術型人物來說。起初,英特爾的理查德·維特(Richard Wirt)發(fā)布了這個帖子,導致人們指責這個回應是冒牌的。然后,格羅夫又以他個人的名義發(fā)了出來,強調他很重視這個問題,并指出這個問題是在處理器最初發(fā)布一年多后,他們這邊才出現(xiàn)的。“我們將芯片的推出時間推遲了幾個月,以便有更多的時間來檢查芯片和系統(tǒng)”他寫道,同時強調沒有任何芯片是完美的,“為此,我們也與許多軟件公司進行了廣泛的合作。”作為回應,它擺出了比激怒眾多技術用戶的客服信息更好的姿態(tài)。但如果你看一下這個帖子,你會發(fā)現(xiàn)格羅夫還是有很多表達憤怒的帖子要處理。
“這真的讓我很生氣,我花了很多錢買這個芯片,”一個回復者寫道,“但是,因為我不為一些可能會批發(fā)奔騰產(chǎn)品的大公司做大量復雜的數(shù)學工作,所以我什么都不是。” 這種動態(tài)可能跟你今天在 Twitter 上看到的壞話差不多。大約在 1994 年感恩節(jié)過后,格羅夫的消息就在網(wǎng)上傳開了,主流媒體開始大肆報道這件事,公司的股票也受到了很大的沖擊。
這個時機在很多方面都很糟糕:1994 年是很多家庭第一次將多媒體、互聯(lián)網(wǎng)功能的家用電腦帶回家的一年,很多家庭都采用了奔騰芯片。這些產(chǎn)品已經(jīng)明確地標記為普通消費者可以購買的東西。而格羅夫在黑色星期五的第二天,不得不設法緩解技術用戶和學者們的擔憂。而主流媒體實際上向公眾淡化了這個芯片的傳奇色彩。一些人則利用這種情況,比如 IBM 公司當時正在向公眾發(fā)布首批 PowerPC 機器,它從其設備中移除了奔騰芯片,并公開宣稱,普通消費者每 24 天就會遇到錯誤,而不是 27000 年。也許真相是在這中間的某個時間?這對英特爾來說并不是什么好時候。公關危機最終看到了它不可避免的結局。在圣誕節(jié)前夕,英特爾看到了失敗的征兆,并召回了這些芯片。布倫的常數(shù)扣動了扳機。
4. 75 億美元
英特爾召回奔騰芯片必須重新計算有關的注銷費用,畢竟任何想要更換新處理器的消費者都可以得到新版本的處理器。盡管這筆費用產(chǎn)生了,但在 1994 年的節(jié)日期間,英特爾看到其 486 和奔騰處理器的銷售量在需求中飛速增長。也許額外的新聞是件好事吧。“壞公司被危機摧毀;好公司在危機中生存;偉大的公司因危機而改進。”
對于奔騰浮點除法缺陷的傳奇時間,你會怎么評價?英特爾找到了一個很好的方法,把這次危機變成了一種重要的學習時刻。這突出表現(xiàn)在該公司決定將臭名昭著的破損芯片轉換成關鍵的一環(huán)。其中,格魯夫的一句話被引用,也就是時刻提醒員工他們并不完美,他們需要從錯誤中學習。
即使有缺陷,但奔騰處理器也成為 90 年代發(fā)布的最重要的技術之一,將 CPU 在計算機中從一個單純的藏在盒子里的組件升級為一個家喻戶曉的名字,成功地實現(xiàn)了目標。而且可以這樣說,雖然肯定有一些技術性較強的用戶感到了不快,但這個傳奇事件卻提升了公司在普通計算用戶中的形象,這也是公司強調品牌建設所要達到的目的。值得一提的是,這個傳奇事件實際上讓一個數(shù)學家出名了,這不是通常能做到的。
在那個讓英特爾損失了 5 億美元的致命方程之前,Thomas Nicely 的成名之作是一款預測足球范特西的棋牌游戲。他承認自己沒有預見到這一點。“數(shù)學家一般都有非常私密的生活,”他在丑聞高峰期接受美聯(lián)社采訪時說,“我覺得看到自己的名字出現(xiàn)在印刷品上有點尷尬。”
去年去世的 Nicely 被同行視為傳奇人物,在 2000 年退休前,他在林奇堡大學工作了大約 30 年。
或許丑聞的副作用之一就是曾經(jīng)一度改變了他的生活吧。他將布倫常數(shù)的精確度再增加了一些。