1. 程式人生 > 資訊 >有史以來最貴的計算機bug,是如何讓英特爾損失數十億美元的

有史以來最貴的計算機bug,是如何讓英特爾損失數十億美元的

在過去的一段時間,英特爾一直是世界上最大且最具影響力的處理器晶片製造商。

不過追溯到 20 世紀 90 年代,英特爾竟因為浮點故障而損失數十億美元。

一位數學家發現了一個威脅英特爾整個處理器執行緒的方程式,而這恰恰是在計算成為主流之前。

接下來讓我們回顧下浮點故障,這個使奔騰變成了一個笑柄的故障。

1919

挪威數學家 Viggo Brun 證明了雙素數(相差為 2 的兩個素數 ,如 3 和 5)的倒數值之和收斂為有限值,即稱為布倫常數。根據前林奇堡大學數學系教授 Thomas Nicely 的說法,通過計算所有雙素數到 10 的 14 次冪時,常數約為 1.902160578。Nicely 在我們的故事中扮演了一個重要角色。

英特爾的奔騰處理器問題像是由錯誤的人在海里撈針頭造成的

為了找到這個故事的根源,讓我們來玩一個邏輯練習:

There is somethIng wrong with this sentence.

當輸入上面的句子時,犯了什麼錯誤嗎?明顯嗎?會影響你的理解嗎?

你可能注意到了:在 "somethIng" 中的大寫字母 "I"。這或許是我們生活中會犯的錯誤。現在,想象一下,如果這是這整個網站上唯一的拼寫或語法錯誤(雖然並不是這樣)。也許,你複製了這個網站幾次,糾正了 "I",所以在這個詞上它沒有大寫。但是原網站的版本上,該錯誤仍然存在。現在想象一下,如果數以百萬計的人搜尋我在網站上分享的每一個短語,比較多的人發現了這一個錯誤,而且這些人中有一個是有影響力的編輯。

雖然這個錯誤非常微小,但是足以威脅一個作家的聲譽。這與 1994 年 10 月 Nicely 拿到新的奔騰處理器後,不知不覺中發現的錯誤是相同的情況。在尋找布倫常數時,他使用英特爾處理器及其浮點功能,意識到處理器給出的答案有點偏差。

THOMAS NICELY,如 1984 的圖所示。圖片:林奇堡大學

對於絕大多數人來說,這一個小錯誤是不會被注意到的。畢竟,奔騰的這一錯誤不是世界末日。但是對於 Nicely 來說是一個例外,因為這破壞了他的研究,且在他的等式中建立了很多問題。在 1994 年的 CNN 的一次敘述 Usenet 的採訪中,Nicely 講述了這個傳奇的故事:

我一直從事純數學方面的研究;這涉及到雙素數的運算,並且在計算過程中會執行很長時間的除法運算。我發現一個異常的點,花費了數月去追蹤它。事實證明了源頭是最不可能被懷疑的物件:晶片。

Nicely 手中的 60 MHz 奔騰晶片是罪魁禍首,他花了幾個月的時間才正確診斷出該問題要歸結為於 CPU。對於 Nicely 和其他數學家來說,去解決這樣的問題是一個讓人非常頭痛的事情。但即使是像這樣一個簡單的錯誤,也足以損害備受矚目的奔騰晶片在極其技術性的數學領域的聲譽。

1994 年 10 月 30 日,Nicely 在 CompuServe 上報道了這個錯誤之後,它成為第一批真正通過網際網路傳播的故事之一。僅僅幾天後,有人在 Usenet 中 comp.sys.intel 組上釋出了關於這個問題的訊息,確認了浮點錯誤。從那開始,這篇報道被工程行業出版物 EE Times 在新聞中報道後,這個故事便傳遍各地。挪威程式設計師 Terje Mathisen 寫道:“在我看來,在 60~90MHz 型號的奔騰只是將浮點分割進行到單精度。”

從此,這個故事開始引起工程和數學空間的注意。但真正的問題可能是英特爾在應對此問題時犯了一個更大的錯誤,一個商業性的錯誤。

到 11 月底和 12 月初,這個故事開始引起大家的注意,爆炸性地成為 1994 年最大的技術故事之一。這一年,網際網路開始第一次進入主流領域,雖然以稍微有些尷尬的方式。但值得注意的是,雖然這一問題出在晶片設計錯誤,但真正的問題出在因特爾處理。簡單來說,就是英特爾最好的使用者沒有得到應有的尊重。

1913

數學家 ÉmileBorel 首次提出無限猴子定理的那一年——這個著名的理論認為,如果一百萬只猴子每天用一百萬臺打字機打字 10 個小時,他們最終會寫出一份偉大的文學作品。在許多意義上,Nicely 偶然發現的問題是學術領域上同樣的事情。

英特爾奔騰晶片。圖片:KRZYSZTOF BURGHARDT /Wi-Ki 共享

這一故事對英特爾造成影響的真正原因歸結於英特爾的反應

對於英特爾這一問題不在於問題本身,而在於如何處理這一問題的出現。回到之前提到的案例,如果你收到一封來自一位非常牛的編輯的電子郵件,告訴你在整個網站中不小心誤寫了一個大寫字母,你會有什麼反應?

可能你會悄悄地找到這一錯誤,且修正它。但英特爾沒有做到這一點。就像報紙上的修正一樣,晶片中的錯誤基本上是決定性的。(嗯,除非你使用類似可程式設計陣列的東西。)他們能夠做到的最好方式就是在將來的版本中消除這一錯誤。雖然軟體可以在一定程度上緩解這一問題,但如果晶片出現問題,也無法完全修正它,除非替換晶片。說白了,浮點誤差雖然糟糕,但巨集觀上看是微小的。

這就像你擁有一臺計算器,在你使用計算器的整段時間裡,它都會給你一個錯誤答案。根據現代處理器對比,最近的處理器都受到 Meltdown 和 Spectre 的困擾,(在過去 20 年中釋出的大多數 Intel,Power Architecture 和 ARM 晶片的設計中都包含了前者),這些缺陷總體上的破壞性非常大。

它們不是理論上的問題,它們是基本的安全風險。修復這兩個缺陷所發現問題的解決方案意味著硬體和軟體製造商必須關閉處理器的一些功能,從而導致人們的計算機執行速度變慢。在某些使用(如雲計算)中,這樣的更改實際上意味著使用同一處理器將花費您更多的錢和時間來執行相同的工作。除了重複性損害之外,英特爾仍然試圖修復這些缺陷。

那麼又該如何看待浮點錯誤呢?發現它的學者 Thomas Nicely 認為,雖然這對他來說的確是個問題,但是當時的計算機處理器非常複雜。這意味著如果他沒有特意探索的話,這個問題可能不會被人發現。“目前這一代的微型處理器已經變得非常複雜,已經不可能完全除錯一個處理器了。”他在 1995 年初告訴《PC 雜誌》。但英特爾當然可以把事情處理得更好。正如數學家和 MATLAB 開發人員 Cleve Moler 在 2013 年所回憶的那樣,英特爾最初給客戶的迴應有很多需要改進的地方。

按照 Moler 的說法,以下是客戶支援機構發給客戶的內容:

最近網上有很多關於奔騰處理器浮點缺陷的交流。對於大多數的使用者來說,這不是問題。

事情是這樣的,英特爾檢測到奔騰處理器的除法運算精度存在一個微妙的缺陷。對於極少數情況(九十億次中出現一回),結果的精度會降低。英特爾在對奔騰處理器進行持續測試的過程中,經過幾萬億次浮點運算後,發現了這個細微的缺陷。英特爾立即對使用浮點單元的最嚴格的技術應用進行了測試,歷時數月,我們一直未能發現任何錯誤。事實上,在經過大量的測試和數百萬個基於奔騰處理器的系統的出貨後,據我們所知,只有一個影響使用者的報告例項。在這個案例中,一位數學家在做素數和倒數的理論分析時,看到小數點右邊第 9 位的精度降低。

事實上,廣泛的工程測試表明,一個普通的電子表格使用者在每 27000 年的使用過程中可能會遇到一次使得精度降低的細微缺陷。基於這些經驗觀察和我們的大量測試,使用常規軟體的使用者不會受到影響。如果你有這種質數生成的精度問題或其他複雜的數學問題,請撥打 1 800 628-8686(國際)或者 916 356-3551。如果沒有的話,您的基於奔騰處理器的系統不會遇到任何問題。在計算機的使用過程中,一旦出現這樣的情況,英特爾公司將與客戶共同解決。

正如我在上面指出的,英特爾非常容易遇到百萬猴子問題。這段話所強調的問題是,英特爾在 Nicely 伸出援手之前就知道了這件事,並且有點放任自流。這之所以有問題,部分原因是焦點從關心這個問題的技術群體轉移到了不關心它的普通消費者身上。英特爾試圖把所有的壓力放在消費者身上,並在當年推出了英特爾 Inside 品牌活動,以及奔騰晶片的消費者友好(和商標友好)品牌。但在試圖贏得普通觀眾的時候,英特爾似乎暗示它不再認真對待現有的使用者群。

對於那些專注於技術應用程式的人來說,浮點除法的情況造成了不確定性,而英特爾的迴應不盡如人意。在 1994 年《華爾街日報》的一篇文章中,噴氣推進實驗室研究員戴夫 · 貝爾(Dave Bell)明確指出,科學界可能會因為對晶片的困擾停止使用奔騰。

“有很多人做研究,必須站在計算機模擬的基礎上發表結果,”貝爾說。“也許現在的一個問題會是,‘它是不是在有問題的晶片上做出來的‘?”

已故英特爾執行長安迪 · 格羅夫(Andy Grove),他於 2016 年去世。圖片:英特爾免費媒體

最終在 1994 年底的時候,英特爾 CEO 安迪 - 格羅夫(Andy Grove)在社交媒體 comp.sys.intel 上釋出了一篇迴應。這件事情並不順利,尤其是對於像格羅夫這樣的所謂技術型人物來說。起初,英特爾的理查德 · 維特(Richard Wirt)釋出了這個帖子,導致人們指責這個迴應是冒牌的。然後,格羅夫又以他個人的名義發了出來,強調他很重視這個問題,並指出這個問題是在處理器最初發布一年多後,他們這邊才出現的。“我們將晶片的推出時間推遲了幾個月,以便有更多的時間來檢查晶片和系統”他寫道,同時強調沒有任何晶片是完美的,“為此,我們也與許多軟體公司進行了廣泛的合作。”作為迴應,它擺出了比激怒眾多技術使用者的客服資訊更好的姿態。但如果你看一下這個帖子,你會發現格羅夫還是有很多表達憤怒的帖子要處理。

“這真的讓我很生氣,我花了很多錢買這個晶片,”一個回覆者寫道,“但是,因為我不為一些可能會批發奔騰產品的大公司做大量複雜的數學工作,所以我什麼都不是。” 這種動態可能跟你今天在 Twitter 上看到的壞話差不多。大約在 1994 年感恩節過後,格羅夫的訊息就在網上傳開了,主流媒體開始大肆報道這件事,公司的股票也受到了很大的衝擊。

這個時機在很多方面都很糟糕:1994 年是很多家庭第一次將多媒體、網際網路功能的家用電腦帶回家的一年,很多家庭都採用了奔騰晶片。這些產品已經明確地標記為普通消費者可以購買的東西。而格羅夫在黑色星期五的第二天,不得不設法緩解技術使用者和學者們的擔憂。而主流媒體實際上向公眾淡化了這個晶片的傳奇色彩。一些人則利用這種情況,比如 IBM 公司當時正在向公眾釋出首批 PowerPC 機器,它從其裝置中移除了奔騰晶片,並公開宣稱,普通消費者每 24 天就會遇到錯誤,而不是 27000 年。也許真相是在這中間的某個時間?這對英特爾來說並不是什麼好時候。公關危機最終看到了它不可避免的結局。在聖誕節前夕,英特爾看到了失敗的徵兆,並召回了這些晶片。布倫的常數扣動了扳機。

4.75 億美元

英特爾召回奔騰晶片必須重新計算有關的登出費用,畢竟任何想要更換新處理器的消費者都可以得到新版本的處理器。儘管這筆費用產生了,但在 1994 年的節日期間,英特爾看到其 486 和奔騰處理器的銷售量在需求中飛速增長。也許額外的新聞是件好事吧。“壞公司被危機摧毀;好公司在危機中生存;偉大的公司因危機而改進。”

對於奔騰浮點除法缺陷的傳奇時間,你會怎麼評價?英特爾找到了一個很好的方法,把這次危機變成了一種重要的學習時刻。這突出表現在該公司決定將臭名昭著的破損晶片轉換成關鍵的一環。其中,格魯夫的一句話被引用,也就是時刻提醒員工他們並不完美,他們需要從錯誤中學習。

即使有缺陷,但奔騰處理器也成為 90 年代釋出的最重要的技術之一,將 CPU 在計算機中從一個單純的藏在盒子裡的元件升級為一個家喻戶曉的名字,成功地實現了目標。而且可以這樣說,雖然肯定有一些技術性較強的使用者感到了不快,但這個傳奇事件卻提升了公司在普通計算使用者中的形象,這也是公司強調品牌建設所要達到的目的。值得一提的是,這個傳奇事件實際上讓一個數學家出名了,這不是通常能做到的。

在那個讓英特爾損失了 5 億美元的致命方程之前,Thomas Nicely 的成名之作是一款預測足球范特西的棋牌遊戲。他承認自己沒有預見到這一點。“數學家一般都有非常私密的生活,”他在醜聞高峰期接受美聯社採訪時說,“我覺得看到自己的名字出現在印刷品上有點尷尬。”

去年去世的 Nicely 被同行視為傳奇人物,在 2000 年退休前,他在林奇堡大學工作了大約 30 年。

或許醜聞的副作用之一就是曾經一度改變了他的生活吧。他將布倫常數的精確度又增加了一些。