序論:圖靈獎講座介紹

下午好,我是 Michel Baudouin-Lafont,我是巴黎大學(位於巴黎附近)的電腦科學教授。我也是 ACM Europe Council 的成員。正因如此,我受 ACM 主席 Wendy Hall 和 ACM CEO John White 的邀請來到這裡歡迎大家,並介紹圖靈講座。來到這裡對我而言是巨大的榮幸,也非常高興能在這裡歡迎大家參加這場 ACM ACM 圖靈講座。這項年度講座由 ACM 圖靈獎得主發表,圖靈獎以英國數學家 Alan M. Turing 為名。這項殊榮常被譽為電腦界的諾貝爾獎。它是電腦科學家能獲得的最負盛名的獎項,獎金為 250,000 美元,由 Intel 和 Google 慷慨提供。圖靈獎得主可以選擇自己喜歡的會議地點舉辦圖靈講座。對我們而言幸運的是,他選擇了在這裡,法國聖馬洛 (Saint-Malo) 舉行的第 37 屆國際計算機體系結構研討會 (ISCA)。他的演講能在歐洲舉行,恰如其分。這裡的 ACM 社群充滿活力且不斷成長。目前會員人數已超過 15,000 人,因此,ACM 加強了對他們活動的支持,不僅在歐洲,也在世界各地。例如,今年成立了 ACM Europe Council,以提高 ACM 在歐洲大陸的參與度和能見度。最近,在印度成立了 ACM India Council,並且該組織也在增加在中國的影響力。所有這些努力都證明了 ACM 對其使命的承諾,即推動計算機作為一門科學和一個專業的發展。在這方面,今晚我們將聽一位真正推動了我們專業發展的人士發表演講,是再合適不過了。我們常常在總結一個人的職業生涯時,輕率地使用「先驅」這個詞。但讓我告訴你,在這個例子中,情況並非如此。「先驅」這個詞真正適用於 Charles P. Thacker,也稱為 Chuck Thacker。事實上,當我們審視他作為如此多當今個人計算機和網路技術的架構師、發明家、設計師和建造者所取得的成就時,沒有其他詞足以形容。

Charles P. Thacker 的成就

Chuck 在 60 年代於 Berkeley 學習物理學。他於 1968 年加入 Project Genie,這是一個早期分時系統的建置專案。這個專案後來轉變成一家公司,Berkeley Computer Corporation (BCC)。不久之後,於 1970 年,他加入了 Xerox Palo Alto Research Center (PARC)。在 80 年代和 90 年代,他是 PARC 許多技術的核心系統設計師和主要的工程力量。其中之一就是 Alto,這是第一台配備點陣式螢幕並運行圖形使用者介面的現代個人電腦。Chuck Thacker 為「所見即所得」(what you see is what you get) 的概念賦予了新的意義。今天每一台 PC 都是 Alto 的直系後裔。讓我分享一個關於這件事的個人故事。這其實不是關於 Alto,而是關於 Alto 的商業後代,Xerox Star。我的研究領域是人機互動,這與計算機體系結構相去甚遠,但在 Chuck Thacker 的工作中,這兩者在他許多專案中結合在了一起。在 90 年代末,一小群人設法組裝了一台 Star 機器並讓它運行起來。他們舉行了最後一次 Xerox Star 示範,然後又一次,然後又一次最後的 Xerox Star 示範。我很幸運地參加了其中一次在 CHI 會議上的現場示範。對我來說,那真是職業生涯中的一個決定性時刻。我意識到硬體、軟體和使用者互動的緊密整合,確實是計算領域一場新革命的基礎。當然,如果沒有 Chuck 在 Alto 上的工作,這一切都不會發生。

然而,他的成就並不止於此。他繼續發明了 Snooping Cache Coherence Protocols,這幾乎用於所有小型共享記憶體多處理器中。他也開創了高性能、高可用性分組區域網路 Ethernet 的設計。他設計了 Firefly,這是在 DEC 工作時的作品,他於 1983 年加入 DEC,成為 DEC CERC laboratory 的創始成員。Firefly 是第一台多處理器工作站。他也參與了 Alpha demonstration unit 的工作。我實際上也有機會使用過這些工作站,親眼見證未來,確實令人驚嘆。在 Alto 問世三十年後,他於 1997 年加入 Microsoft Research,協助建立 Cambridge Lab,他也為當今最廣泛使用的 Tablet PC 設計和建造了原型。先驅、創新者、有遠見者。這些詞絕對適用。

圖靈獎感言與謝詞

他今晚演講的主題是「透過檢視過去改善未來」。各位女士先生,親愛的朋友們,請歡迎今年的 ACM AM 圖靈獎得主,來自 Microsoft Research 的技術院士 Chuck Thacker。

好的,非常感謝。今晚我要感謝 ACM、提名委員會以及本獎項的贊助商 Google 和 Intel。我特別要向 Intel 表示個人感謝,感謝他們大力支持 International Science Talent Search 等活動,這些活動旨在提高年輕人對科學的興趣。我認為他們做得非常棒。這絕對是我從未預期會獲獎的獎項,因為自從 Association for Computing Machinery 將此獎項頒給其主要貢獻確實是在計算機領域的人,至今已經 43 年了。許多其他人獲得了這個獎項,他們都做了很棒的事情,但他們並非「機匠」(machinists)。

我也想... 可以請將投影片打出來嗎?謝謝。我想特別提及幾位長期合作夥伴。這些人是我在我職業生涯大部分時間裡工作的三個實驗室中的合作者。其中最重要的一位是 Butler Lampson。沒有提到且常被遺忘的是,我沒有博士學位。我不是 Thacker 博士,只是一個榮譽學位。但我可以告訴你,與 Butler Lampson 合作大約兩年,相當於大約五個博士學位。我選擇合作夥伴的方式,通常反映了我對此的看法。這是我建議這個領域的新人盡可能做到的,那就是選擇比你聰明的人。因為你可以從他們那裡學到太多東西,這讓你的生活充滿樂趣。與 Butler 的合作就是如此。

Butler 和我一起工作,雖然不是在 940 系統上,這個系統是大學聘我協助建造的,但我們在後續的 Berkeley Computer 500、MAX 分時系統(multiple access Xerox computer)上合作,這是一個非常大的 PDP-10 克隆,我們不得不自己建造而不是購買,因為 Xerox 剛剛收購了一家電腦公司。他們想使用他們的電腦,但我們認為不夠令人滿意,因為 ARPA 研究社群都使用 PDP-10,所以我們就自己建造了一台。結果還不錯。最後,我們明白了我們應該做什麼,於是建造了 Alto。我們隨後又建造了幾台機器,Dorado、Firefly,以及幾種網路,AN1 和 AN2,最後是 Tablet PC。Butler 和我合作參與了所有這些專案。其他幾位,Ed McWright,他 शायद 更為人所知的是 V-Tree 的發明者,他與我在 Alto 硬體方面合作,他是硬碟控制器的設計師。Mike Schroeder 從 MIT 加入我們在 PARC,我們從那時起就或多或少地一直在合作,中間只有短暫的間歇。嗯,他選擇留在 DEC,而我已看到大勢所趨,去了 Microsoft。所以我們在 Firefly、AN1 和 AN2 上合作。Roy Levin,他現在是我每天工作的實驗室的主任,Mike 是副主任,我和 Roy 在 Firefly 上合作過。Andrew Brearley 也是一位長期的合作夥伴,我至今仍在與他合作一個叫做 Beehive 的東西,稍後會再告訴你更多。當然,還有幾十位更多的同事。圖靈獎這樣的獎項不是頒給個人的,它實際上是頒給團隊的。我有很多團隊。我喜歡認為自己是團隊領導者,但不是一個好的經理。所以我很享受與所有我合作過的人一起工作,我希望他們也像我享受與他們一起工作一樣享受。

演講結構與核心論點

大多數圖靈講座,我在過去幾個月裡研究了不少,要不是職業回顧,也就是我告訴你我做了什麼,要不就是對未來的重大挑戰。我決定嘗試做一些不同的事情。我有一個論點,我將提出這個論點,並提供一些例子來試圖辯護這個論點,看看結果如何。現在我們需要弄清楚如何讓投影機往前。好了,差不多了。現在我們需要弄清楚如何把那個東西弄走。看起來可以。

論點的根本是:計算機體系結構已撞牆了。順便向在座的 ISCA 人群道歉,因為我要說的內容是你們非常了解的,很抱歉,你們必須忍耐一下,因為這次演講實際上正在錄製,供更廣泛的聽眾收聽。所以我會回顧很多你們大學時學過的東西。這堵牆其實相當有趣。它有好幾道。有功耗牆 (power wall),有時脈速度牆 (clock rate wall),還有…

我沒有涉及的成本,但我可能應該涉及。Alto 在當時耗資 12,000 美元,那時 12,000 美元確實是一筆巨款。我幾週前去了一家當地的電腦商店,花了 900 美元買了一台家用 PC。我們在 1972 年和 2010 年用這筆錢買到的東西如下所示:

回顧過去與現今:Alto 與家用 PC 的比較

特性 Alto (1972) 家用 PC (2010) 速度提升倍數
CPU 時脈速度 6 MHz 4x 2.8 GHz 1900
記憶體大小 128 KB 6 GB 48000
記憶體存取時間 850 ns 50 ns 17
網路速度 3 Mbps 1 Gbps 300
硬碟容量 2.5 MB 700 GB 280000

一個 CPU 的時脈速度是 6 MHz,而現在是 4 個 CPU,時脈速度是 2.8 GHz。這在速度上是 1900 倍。Alto 的記憶體大小是 128 kilobytes。這是一個不可想像的小記憶體量,大約是現在核心中 Level 1 快取或小型 Level 2 快取的大小。我今天的家用 PC 有 6 gigabytes 的記憶體。這是一個 48,000 倍的差異。這些年來我有點驚訝,我總需要更多的記憶體,因為 Alto 在 128 kilobytes 裡能做很多事情。發生了什麼?我會稍微談談發生了什麼。部分原因是軟體做了更多事情,部分原因只是我們「幫了忙」。

其實還有另一個定律。我今天會談到幾個定律,但還有另一個定律是由 Nathan Mirabold 提出的,他曾是 Microsoft 的 CTO。他說:「軟體就像氣體,它會膨脹以填滿可用空間。」

所以,記憶體存取時間。這一個有點棘手,因為 Alto 的存取時間是 850 毫微秒 (nanosecond),而我的家用 PC 是 50 毫微秒。這只有 17 倍的差異。所以,我們在這裡看到了記憶體牆 (memory wall)。CPU 變快了很多,但記憶體沒有。我們該如何解決這個問題?幾十年來,架構師們迎難而上,提供了各種解決方案,我們將看看其中一些解決方案,並提出問題:如果是在今天,我們還會做出同樣的選擇嗎?我其實不知道這個問題的答案,但我認為這個問題值得提出。

網路方面,最初的 Ethernet 是 3 megabits per second,現在是 gigabit,或者如果你在更有限的環境中操作,可能很快就會達到 10 或 100 gigabits。這只有 300 倍的差異,但看起來暫時夠用了。硬碟容量是最有趣的。Alto 是 2.5 megabytes,我的家用 PC 是 700 gigabytes。280,000 倍的差異。

驅動技術的指數成長與縮放定律

所以,計算領域有很多指數級的驅動因素在運作,我們已經習慣了指數級的增長。最大的當然是旋轉磁性儲存裝置。今天,我們可以將你在一生中接收到的每一位數位資訊,所有的影片,所有的電視節目,所有你閱讀的東西,儲存在幾個硬碟上。實際上有一些有點奇特的個人,比如我的同事 Gordon Bell,他們真的在這樣做。

玻璃纖維 (Glass fibers) 是我們不太常想到的東西,但幾年前,Rob Pike 告訴我,我們製造透明玻璃成為光纖電纜的能力以及隨後將多個波長複用到這些電纜上的進步,徹底改變了計算和通信。當然,今天地球上任意兩點之間不需要超過 50 毫秒的距離。我們打國際電話時就能看到這一點,過去國際電話是通過衛星傳輸的,然後衛星就發生了什麼,現在衛星用於廣播足球比賽。所有的電話都通過光纖傳輸,從我在 Palo Alto 的家打到世界任何地方,感覺就像打本地電話一樣。

最著名的技術驅動因素是關於半導體進步的定律。當然,這不是一個定律,它只是 Gordon Moore 在 1965 年做出的一種觀察,許多人當時沒有完全理解。他們不太明白他說了什麼。他沒有說晶片會更快,但它們確實變快了,或者它們會變得很熱並消耗大量功率,而它們確實如此,但他只是說,在給定尺寸的矽晶片上,他能放置的電晶體數量大約每 18 到 24 個月就會翻倍,他說這是在「可預見的未來」。而這個可預見的未來至今已經持續了 50 年,實際上還不止。

所以,檢視計算機體系結構中我們擁有的其他定律之一,以理解定律的本質,實際上是很有啟發性的。我們可以很容易地預測這些定律,有些人也確實預測了,這一切都取決於頁面頂部的那一個方程式:

功率 = 電路的電容負載 * 電壓的平方 * 頻率 (Power = Capacitive load on a circuit * Voltage^2 * Frequency)

這將功率、電容負載、工作電壓和頻率聯繫起來,而這就是你理解這個定律所需要知道的一切。傳統的縮放 (scaling),這已經奏效多年,它說如果我們將電容和電壓都按因子 k 縮小,那麼新的功率將是 C 除以 k 乘以 V 除以 k 的平方乘以 F 等於原始功率除以 k 的立方。這相當不錯。當然,k 是特徵尺寸 (feature size)。從 90 奈米到 45 奈米的過渡就是 k 等於 2。所以新的晶片在相同的頻率下,面積是原始面積的 1/k 的平方,功率是原始功率的 1/k 的立方。

當然,你不會這樣做。你會利用這個絕佳的機會,將頻率也按因子 k 放大。如果這樣做,結果是每單位面積的功率保持不變。這是一個有趣的觀察,因為通常情況下,滿足於目前速度的人會說,嗯,我寧願擁有一個成本是原始成本 1/k 的平方的晶片,順帶一提,因為晶圓處理的成本相當恆定,而你得到的晶片數量與晶片面積成正比。但人們並沒有完全這樣做。主要的半導體供應商以不同的方式利用了縮放。

所以你可能會認為,既然功率與晶片面積成反比,新晶片會更便宜。據我所知,只有一個領域實際應用了這一點,那就是電視遊樂器。當電視遊樂器的製造商生產新的遊樂器時,他們會投入大量資金,使用最快、最昂貴的技術來建造第一版的遊樂器。而這些遊樂器的生命週期大約是五年。在這段時間內,由於遊樂器玩家不希望遊戲的玩法有任何改變,製造商可以做一些事情。在生命週期開始時,他們是虧損的。然後第一個尺寸縮小兩倍的因子出現了。新的機器中的晶片成本降低到原始成本的 1/8。如果你再次這樣做,到五年期結束時,你就開始賺錢了。而在整個過程中,遊戲本身在遊樂器上得到了補貼。所以如果你做得對,選擇正確的技術,並且它能運作五年,你就能大賺一筆。我們在第一代 Xbox 時錯過了這一點,但在第二代上我們成功了。我認為 Microsoft 現在是遊樂器遊戲的主要玩家。

正如我所說,製造商以兩種不同的方式利用縮放。生產 RAM 的人,也就是我們看到了 28,000 倍差異的領域,利用縮放來提高密度。所以他們使用稍微低的電壓,有些在較高的頻率下運行,但不高,有些消耗較高的功率,但也不高。記憶體不需要複雜的散熱措施。你只要讓空氣流過晶片,它們就能自行散熱。但它們獲得了更多的位元。而 CPU 製造商走了不同的道路。他們利用縮放來實現更高的時脈速度。此外,他們使用更複雜的設計來提高 CPU 的速度。結果是 CPU 變得非常熱,這就是功耗牆。記憶體變大了,但速度沒有快很多。這就是我們在圖表(投影片二或一)中看到的記憶體牆。

未來趨勢與設計挑戰

所以,未來的趨勢是,我們不會看到單一的超快 CPU,這在幾年前的半導體技術路線圖中預測今天時脈速度會達到 10 gigahertz 的數量級。它們並沒有,它們大約在 2.5 或 3 gigahertz 的數量級。與其看到這些超快的速度,不如看到更多這樣的核心。而且我們在晶片上看到的核心將更簡單。但是,或者可能會有其他事情發生。我們可能會看到異質晶片 (heterogeneous chips),在同一個晶片上有不同類型的處理器,以便進一步優化在給定能量下獲得的性能。當然,我們今天非常擔心能源問題,因為我們正在耗盡它。對於像我們這樣建立大型資料中心的公司來說,這個問題相當嚴重。因此,我們非常關注它。

重新審視過去的設計決策 - 範例一:虛擬記憶體

所以,基於對計算性能、能源和成本的縮放驅動因素的理解,我們可以回到我談到的那些例子,這些例子說明為什麼回顧過去以決定未來該做什麼是個好主意。所以,我使用的第一個例子是虛擬記憶體 (virtual memory)。虛擬記憶體是在 60 年代早期在 Manchester Atlas 機器中引入的。Atlas 有 16k 的...

...非常慢。所以我們用快取 (caches) 代替全相聯記憶體 (fully associative memories)。所以我們快取了頁表 (page tables)。當我們進入多程式設計 (multi-programming),即在一台機器上執行多個獨立的行程 (processes) 時,每個行程都有一個這樣的表,這只會讓事情變得更糟。所以我們做了架構師們總是做的事情。我們進行了創新,並嘗試了許多方法:分頁表 (paged tables)、分段位址 (segmented addresses)、分頁段 (paged segments)。這些方法對我們來說效果不錯,但虛擬記憶體系統仍然存在少量的開銷。而且有時候,虛擬記憶體會在其他領域產生意外的後果。

幾年前,我參與了一個建造 Tablet PC 的專案。這是一個靠電池運行的便攜式裝置,我們在 1999 年非常擔心這台 PC 的能耗問題。所以我們希望它在不使用時能非常有效地進入所謂的待機狀態 (standby state),然後非常快速地恢復。這一切運作順利,平板電腦可以進入待機狀態,但當它從待機狀態恢復時,發生了一些相當神秘的事情。結果是,在系統開始從待機狀態恢復之前,你必須啟動硬碟。經過一番檢查後,我們發現了原因。結果發現在 Windows 系統中,裝置驅動程式不是由 Microsoft 編寫的,而是由硬體供應商編寫的。因此,為我們在這台 Tablet PC 中使用的一些 I/O 裝置編寫驅動程式的人沒有做得完全正確。結果是,當 Windows 準備進入這些低功耗狀態之一時,它會向所有 I/O 驅動程式發送處理器間訊息,說:「我即將關閉你,請分頁載入所有你需要重新初始化硬體時所需的內容。」當所有這些都完成後,Windows 會讓系統將動態 RAM 進入所謂的自刷新模式 (self-refresh mode),這實際上消耗很少的功率,然後關閉硬碟、CPU、顯示器以及其他所有東西的電源,只剩下一個非常小的、低功耗的核心邏輯,等待你按下按鈕說「重新啟動」。但當我們向那些驅動程式發送訊息時,實際發生的情況是,它們說:「好的,你要求的一切我都做了」,但實際上它們什麼也沒做。結果是,當你按下按鈕時,首先發生的事情就是這些驅動程式之一發生了分頁錯誤 (page fault),你必須啟動硬碟。

我們最終解決了這個問題,現在的筆記型電腦確實可以正確地進出待機狀態,但我當時告訴我攜帶筆記型電腦的朋友們的是,如果你真的想消除從待機狀態恢復的延遲,只需禁用分頁。他們看著我,好像我來自火星,說:「那絕不會奏效」,我說:「試試看。」結果是問題解決了,除了在運行幾天後,系統會彈出一個訊息說:「虛擬記憶體不足。」這時候你只需要重新啟動,並在一個受控的時間執行,一切都沒問題。當然,如果你有一個需要一直使用大量記憶體的複雜應用程式,這就不會奏效,因為記憶體會太快耗盡。但對於許多人們使用筆記型電腦的目的來說,這運作得很好。當然,那些日子已經過去了。這些東西現在都能正常工作。

所以 VM 今天仍然解決了一些問題。一個是保護 (protection)。保護是後來在虛擬記憶體之上添加的功能。它的想法是,你可以在頁表中設定位元,說明給定的程式或作業系統模式允許對這個記憶體做什麼,並且只有作業系統可以修改這些位元。只要我們繼續使用允許使用者表達指標的古老語言,比如 C 或 C++,保護就仍然是一個問題。我實際上除非絕對必要,否則不怎麼使用這些語言,因為我會犯太多錯誤,而且編譯器找不到它們,我會花很多時間調試,這是我不喜歡做的事情。所以我更喜歡使用類型安全的語言,並且有垃圾收集器。

重定位 (relocation) 的問題,這意味著你可以建構一個從固定位置(通常是零)開始的映像,並實際將其放置在記憶體的任何地方,這是 VM 解決的另一個問題。但是分段 (segments) 實際上要簡單得多,也許我們應該考慮一個使用分段的更簡單的系統。

碎片化 (fragmentation) 也是一個問題。有時候你的程式會要求一個比目前實際記憶體中任何連續區域都大的陣列。但是如果我們使用這些非古老的程式設計系統,那麼它很可能會有一個壓縮式垃圾收集器 (compacting garbage collector),它會時刻最大化任何請求可用的儲存空間,你會非常高興。

所以 VM 的底線是它在資源稀缺時期被發明。今天的實際記憶體大小對於我們建構的系統來說,已經不再是問題。所以它仍然是個好主意嗎?我不知道,但我認為這個問題值得提出。嗯,這很有趣。

重新審視過去的設計決策 - 範例二:一致性共享記憶體

範例二是一致性共享記憶體 (coherent shared memory)。當然,直到 70 年代,一致性並不是一個真正的問題。當我們有了快取 (caches) 時,情況才發生了變化。最初,當你只有一個單處理器時,唯一的一致性問題是處理器與輸入/輸出裝置之間的問題。即使我們有了早期的多處理器,基於匯流排的 snooping 協議就足夠了,而且它們實際上相當簡單。然而,當我們在 80 年代早期開始建造更大規模的多處理器時,情況發生了變化,協議實際上變得複雜得多,因為匯流排不再奏效。我們有了點對點連接 (point-to-point links),因此協議更複雜,隨著複雜度的增加,製造商越來越多地轉向形式化方法 (formal methods)。這實際上是形式化方法最早用於「實戰」(in anger) 的情況之一,也就是用來解決實際問題,而不是嘗試證明程式正確性,這人們已經做了相當長的時間,以確保正確性。事實上,今天,我相信 Intel 是地球上使用模型檢查 (model checking) 最多的用戶,他們用它來驗證他們對他們現已極其複雜的一致性協議所做的任何更改的正確性。

我實際上有一段時間在 Xbox 工作,我有一個實習生,他非常有效地在幾件事上使用了模型檢查,所以他來實習,我們一起研究了 Xbox 360 中的一致性協議,這實際上是一個相當簡單的協議,雖然我們在他 12 週的實習期間沒有完全完成模型,但在建立模型的過程中,我們發現了一個錯誤,結果這是一個相當微妙的一致性錯誤,事實上,幾週後,IBM 實際上承認了,說你知道嗎,那不是一個錯誤,我們的測試套件 (suites) 發現不了它,而且在你拿到晶片四天、四小時後,它們就會死鎖 (deadlocked)。我真的想讓那個孩子坐著賓士回學校,但我沒能搞到那筆錢。

所以,最初,80 年代早期實際上是計算領域的另一個有趣的時期。那大約是小規模團隊可以實際設計和建造一個新的計算機體系結構,如果他們願意,還可以小規模建造並在日常工作中使用它的最後一個時期。這就是我們在 PARC 所做的,這也是我們在 Firefly 所做的,而那實際上是我們最後一次能做到這一點的時候了,因為建造一個在任何方面都能與你能實際買到的系統競爭的系統所需的複雜度,其成本是令人望而卻步的。而且晶片製造真的變得非常重要,當然,今天這些問題已經變得更加嚴重,以至於地球上不再有大量的晶圓廠 (fabs),因為它們的成本實在太高了。

所以,如果我們廢除一致性記憶體,我們可以替換成什麼?一種可能性是訊息傳遞 (message passing),我對此感到困惑,因為自從 Lauer 和 Needham 在 1977 年的一篇論文中,我們就知道訊息傳遞和共享記憶體實際上是彼此的對偶 (duals)。在對它們用於何種目的進行適當解釋後,它們都能做同樣的事情。你可以用其中一種做任何事情,就可以用另一種做,反之亦然。但實際上,訊息傳遞比這些複雜的一致性協議要簡單得多。那麼,為什麼我們要走建構共享記憶體系統這條路呢?我思考了一段時間,得出結論有幾種可能性,可能還有更多。如果有的話,我很樂意聽到。

可能性之一是程式設計更容易。也就是說,如果你建立一個訊息系統並且你弄錯了,然後你的程式不做任何事情,或者死鎖了,或者發生了類似的事情。如果你有一個共享記憶體程式,並且你試圖將原始的順序程式轉換成並行或並發運行的東西,你可以透過調試使其運作起來,它看起來可能運作正常,但可能存在微妙的時序錯誤 (timing bugs) 和類似的問題。所以,我個人的觀點是,我寧願擁有一個正確的系統,而不是一個易於建構的系統,但很多人不同意我的看法。

可能性之二是我們運氣好,我們能夠在小規模上讓它適當運作,而我們沒有完全預見到更大規模會引入的複雜性。所以,你可能會問,今天我們是否會做出同樣的選擇。同樣,這是我不知道的事情之一,但我認為這個問題值得提出。

重新審視過去的設計決策 - 範例三:執行緒與鎖定

範例三是執行緒與鎖定 (threads and locks)。我們引用一段 Ed 的話

很多程式碼,因為程式碼很難修改。但如果我們不這樣做,我們就注定失敗。那麼,除了鎖定之外,還有其他可行的替代方案嗎?一種可能性是事務記憶體 (transactional memory)。這種技術借鑒了資料庫社群的經驗,他們已經進行事務處理多年了。事務有四個屬性。事務是原子性的 (atomic)。也就是說,事務內完成的所有工作要么作為一個原子操作提交,要么如果發生錯誤就中止 (abort)。它們是隔離的 (isolated)。也就是說,一個事務中發生的事情不會在另一個事務中造成任何問題。它們不一定是持久的 (durable)。已經有很多設計方案。我有一位朋友,Tim Harris,最近撰寫了一本關於事務記憶體的第二版書籍。在今年早些時候的一個研討會上被問及他這本書中評論的那些關於事務的論文的主要訊息是什麼時,他說:「嗯,我還不太明白是怎麼回事,因為有 500 篇。」

所以,在過去大約 10 年裡,關於事務記憶體已經寫了大約 500 篇論文。它們也有自己的問題。它們絕不是萬靈丹,因為有些問題確實是病態的 (pathologies)。你不能在事務中執行 I/O。你必須想辦法做其他事情,因為正如 Simon Payton Jones 曾經指出的那樣,你不能「收回導彈」(unfire the missiles)。在事務周圍存在類似於粗粒度 (coarse-grained)、細粒度 (fine-grained) 鎖定的爭論。而關於事務,我最困擾的一點是,事務是一種推測 (speculation)。我對推測實際上感到相當不安,因為推測就是你做很多工作,希望你會得到正確的答案,但如果沒有,你就必須丟棄這些工作。在執行這個丟棄操作時,你浪費了能量和處理器週期。所以如果你建構一個使用事務的系統,並且其中一個事務頻繁中止,那麼你就會浪費大量能量。這在新的世界裡是不好的。

但我認為有一個更糟的問題。這實際上是一個工程問題。我們在記憶體系統中使用事務方面沒有任何經驗。我們需要一些實際的實現。我們需要更好的基準測試 (benchmarks)。我們有大約四個關於事務的基準測試,每個人都在使用。這有點像體系結構社群中每個人都使用 SPEC 一樣。在事務記憶體領域工作的體系結構社群的一個子集使用了大約四個基準測試。我們需要建構一些真正的事務系統,看看我們是否能做到。這裡有很多「雞生蛋還是蛋生雞」的問題。如果我們不知道處理器是否真正有用,為什麼要建構一個能夠相當有效地執行事務記憶體的處理器呢?

另一個可能替代執行緒和鎖定的競爭者是純粹的訊息傳遞,但我認為這可能已經「超出範圍」(beyond the pale)。所以,是的,最後一個,不,這不是最後一個例子。

重新審視過去的設計決策 - 範例四:複雜 CPU

範例四是複雜 CPU (complex CPUs)。這就是複雜度牆 (complexity wall)。為此,我需要一個時間線,我很樂意提供。

在 50 年代和 60 年代,我們處於實驗的黃金時期。許多人實驗了計算機體系結構的變體。我們建造了十進制 CPU (decimal CPUs)、處理字串的東西 (string processors)、用於各種語言的單語言 CPU (single language CPUs),其中一些非常不錯。我認為 B5000 就是設計得最優雅的機器之一。它只做一件事做得好,那就是執行 ALGOL 程式。但如果你想執行 ALGOL,這是一種優雅但速度不是很快的方式。我們甚至有堆疊機器 (stack machines),其中一些是我建造的。堆疊機器非常棒。它們的程式碼密度極高。它們在性能上有一些問題。

70 年代和 80 年代是一個有趣的時期,發生了兩件大事。許多這些體系結構就這樣消失了。這是一個整合和所謂「宗教戰爭」(religious warfare) 的時期。有兩大倖存的體系結構類別。第一種是 RISC,當然是指精簡指令集計算 (reduced instruction set computing),其代表性工作由 IBM、Stanford 和 Berkeley 完成。它與以 x86 為代表的 CISC 體系結構展開了較量,x86 仍然是 Intel 的一種演進式體系結構。許多人寫了大量論文討論哪一種更好。而實際發生的是,這些爭論最終消亡了,因為這兩個陣營的支持者發現,對方實際上也有一些很棒的想法,所以他們開始互相借鑒。很快,你幾乎分不清 RISC 和 CISC 的區別了。所以這種情況就消失了。

90 年代是一個更有趣的時期。90 年代本質上是精進 (elaboration) 和追求指令級並行 (instruction-level parallelism, ILP) 的時期。這幾十年來,架構師們的主要工作,而且這種趨勢一直延續至今,我們在這次會議上聽到了一些精確體現這一點的論文。基本上,RISC 和 CISC 這兩個陣營最初非常簡單的想法都被大量精進,以獲得更高的性能。我們轉向了多層快取階層 (multi-level cache hierarchies)。我們轉向了各種形式的多執行緒 (multi-threading)。我們當然追求更長的管線 (pipelines),以便提高時脈速度。我們在性能上做了許多增量式 (incremental) 的進步。一篇好的論文可能會是這樣的:你知道,它大概是這樣的:「我以如下方式修改了某某體系結構,通常是 RISC 體系結構,因為那是學術界可以研究的,我在模擬的這台新體系結構上運行了 SPEC 測試,在所有 SPEC 基準測試中,我獲得了負 3% 到 7% 的改進。」

所以人們試圖利用複雜性,從原本作為順序程式編寫的程式中挖掘出最後一點點指令級並行。他們發現的根本問題是,在這樣的程式中,可用的 ILP 確實不多。因此,我認為許多這些額外的邏輯、額外的複雜性、額外的功率和額外的能量並沒有得到很好的利用。

但是如果我們看看今天,CPU 可能會有一些新的方向。我認為最有趣的方向,因為它在某種程度上與我認為體系結構未來應該是什麼樣子(或者說,應該是什麼樣子)的看法相似,那就是 Intel 的單晶片雲端電腦 (single-chip cloud computer)。這是一個相當有趣的裝置。它有很多簡單的核心,目前是 48 個,我被告知擴展到 100 個是完全可行的。這些是較舊的核心。它們是按順序執行 (in-order execution) 的核心,管線非常短。它們是 P54C 核心,我相信大約有 10 年歷史了,也許更久。這個系統中完全沒有一致性。如果你想要,你就自己想辦法實現並提供它。實際上有一些小的快取,但處理器可用的主要資源是一個小的本地記憶體。可能有點太小了,但這可以解決。而且它有一個非常高效的核心間網路 (inter-core network)。

我們看到的另一個趨勢是低功耗核心 (lower power cores)。還記得那個 K 平方、K 立方困境嗎?很多人意識到,對於我們今天在世界上做的很多工作來說,今天的電腦已經足夠快了。而他們更想要的是更好的能源利用和更低的價格。因此,製造商實際上正在滿足這種需求,他們提供了像 Atom 晶片這樣的東西,這是一個非常好的晶片,實際上。它消耗的功率不多,但畢竟,如果我坐在飛機上編輯 PowerPoint 演示文稿,或者讀書,或者看電影,對我來說更重要的是,我可以用一次電池充電橫跨大西洋。用我的新筆記型電腦,我可以做到。它的電池續航時間大約是 13 小時。所以這是另一種可能性,也是我們可以走的方向,特別是在桌上型電腦領域。

重新審視過去的設計決策 - 範例五:中斷

我認為我們應該真正檢視的最後一個經典體系結構例子是中斷 (interrupts) 的概念。我們真的需要硬體中斷嗎?我們今天聽 Bill Downey 說了一些我完全同意的話。中斷真的「笨重」(clunky)。它們通常是在體系結構的主體定義之後才添加到系統中的。而在多核心世界中,決定中斷應傳遞到哪裡實際上是一個相當困難的問題,因為引起中斷發生的執行緒 (thread) 在中斷實際發生時很可能已經移動了。因此,在擁有大量核心的世界中,中斷的價值似乎變得不那麼容易理解了。它們確實大大增加了硬體的複雜性。很長一段時間以來,它們是系統中錯誤的主要來源。如果你將錯誤類型的 I/O 裝置插入 PC 的連接器中,中斷系統會搞砸機器,使其無法正常工作。而且這很難檢測到。我們知道不帶中斷的系統是可能建造的,因為人們已經做到了,並且非常成功。我知道的最早的例子是 BBN Pluribus,它是第二版 ARPANET。這是一個非常好的系統,它本質上是一個在沒有中斷的機器上實現的非搶佔式多任務系統 (non-preemptive multitasking system)。

Beehive 專案:一個基於 FPGA 的實驗平台

為了探索其中的一些想法,在我的實驗室裡,我們實現了一台新的機器,叫做 Beehive。Beehive 實現於一個單一的 FPGA 開發板上,就是今天早些時候一位講者描述的那種開發板之一。我建造這個,是因為過去幾年我一直在參與這個叫做 RAMP (research accelerator for multiple processors) 的聯盟,我意識到...所以我們做了幾件事。我們設計了...我們實際上有一種不同的機制來實現。這台機器叫做 B3。在這次會議中,有很多報導關於使用前身 B2 機器的工作,而 B3 現在也開始使用了。我們還促成了一家新創公司的出現,以便實際維護和...

他們沒有原始碼,所以你無法修改。它們很貴。你必須付錢。或者它們太大。所以你只能在像 V3 這樣尺寸的東西上放一兩個,或者更確切地說,這種人們花 750 美元就能買到的開發板。所以我說,好吧,我會設計電腦。我就自己建造一台。這是一個相當有趣的想法。我們寫了 6,000 行 Verilog 程式碼建造了這個東西。我們感興趣的是一個我們可以贈送的系統,它可以在學校裡用來教導學生體系結構,以一種他們喜歡的方式學習。我一直對我自己公司內部竟然有這麼多人不知道電腦如何運作感到不安。他們認為一切都在 C 編譯器那裡就結束了。

所以我們建造了這台機器,並為它建造了工具鏈 (tool chain),包括用於 Microsoft managed languages(C# 及其相關語言)的編譯器,還有一個 C 編譯器。是的,我們仍然用 C 程式設計,很抱歉這樣說。還有一個模擬器等。我們將此授權給任何人用於研究用途。我們的第一批學生實際上是 MIT 的學生。這個東西於今年一月在 MIT 成功用於教授一門 AP 課程,這是一種學期間的課程,持續一兩週。學生們可以選修,沒有評分。有 14 名學生申請了,他們非常喜歡。他們能夠做以前從未做過的事情。MIT 現在正在使用這些材料在秋季學期開設一門完整的學期課程。所以這實際上是有先例的,那就是 Stanford 的 NetFPGA 計畫。這項由 Nick McKeown 主導的工作,實際上改變了大學教授網路的方式。這與我們的計畫大致相同。他們有一個開發板和一些課程材料,然後就免費提供出去。那些大學購買開發板,雖然價格高一些,但至今他們已經賣出了大約 1,300 個。如果我們在體系結構領域也能取得這樣的成功率,我就會很高興了。

這台機器的特點是,它提供了 13 個非常簡單的 RISC 核心。它們完全是自己開發的。它們也必須如此,因為如果我們要免費贈送它,我們不希望有人出來說:「你使用了我們的體系結構,侵犯了我們 17 項專利,請付費。」所以我們從頭開始完成了整個計畫。它有一個 1 gigabit 的 Ethernet 控制器,一個顯示控制器,2 gigabytes 的共享 DRAM(非一致性記憶體),以及硬體支援的訊息傳遞(只是為了看看我們是否能讓它運作),以及硬體支援的信號量 (semaphores),二元信號量 (binary semaphores)。所以這並不是為了與真正的系統競爭,而主要是為了比模擬器更靈活,而且速度快很多。所以 13 個 100 megahertz 的核心,即使按照十年前的標準,也不是一台寒酸的機器。當然,它的體積和速度足夠運行完整的 OS。事實上,我們無意在這台機器上運行 Linux 或 Windows,但在我們的 Cambridge lab 與 ETH Zurich 合作開發的一個新作業系統 Veralfish,正以它為移植目標,這件事現在正在進行中。

Beehive 核心的樣子如下。你可能已經有 25 或 30 年沒見過這樣的圖片了。這是一個非常簡單的按順序執行 (in-order) 的三級管線。它有 32 個暫存器,32 位元暫存器,兩個讀取埠 (read ports) 和一個寫入埠 (write port),以及一個指令快取 (instruction cache) 和一個資料快取 (data cache)。資料快取沒有顯示出來。它們都是 4 kilobytes,所以快取命中率不太好,但速度足夠快,因為事實上,我們稍後會看到,FPGA 中的速度比率與真實系統中的完全不同。當你在這類環境中工作時,你必須不斷意識到,為了在真實的矽晶片中建造你的設計,你需要對設計做什麼。這不一樣,但你必須針對媒介進行優化,才能使其完全運作。

關於這台機器有一點奇怪的地方。它是一種解耦 (decoupled) 體系結構。你注意到有三個隊列:位址隊列 (address queue)、寫入隊列 (write queue) 和讀取隊列 (read queue)。將發布位址和獲取資料這個想法解耦是一種老舊的想法。我聽說這個想法是來自 Bill Wolf,他在他設計的一台機器中使用了這個概念,當時他在 1980 年建構高性能 ADA 編譯器。他想要一種可以用作 ADA 編譯器輸出的體系結構。事實上,他的機器沒有快取。他喜歡這種解耦體系結構,因為他可以編寫編譯器,將載入指令 (load) 大幅度提升到使用指令 (use) 之前,從而隱藏大量延遲。我與他討論了這個想法,我說:「Bill,我覺得這是一個極其聰明的想法。你介意我『偷』它嗎?」他說:「不,儘管拿去用。」

關於 FPGA 的一個問題是,你有很多核心。你通常無法將它們連接到記憶體,因為在 FPGA 中,關鍵的資源實際上是長導線。你還會遇到一些其他資源的限制,但這是第一個。為了克服這個限制,我們使用了你在這裡看到的令牌環界面 (token ring interface)。基本上,我將其比作一列火車,其中一個火車頭從車站(即那個 MIM 模組的右側)出發,說:「這是一個令牌」,任何想要進行記憶體存取的人都可以添加一個位址槽位 (address slot) 或一個寫入資料槽位 (write data slot) 或一個訊息槽位 (message slot) 或一個鎖定槽位 (lock slot)。這些槽位圍繞著環傳輸,火車越來越長,直到它們回到主站,在那裡它們被剝離並發送到 DER 控制器,這個控制器比環本身快得多。這個環總共可以提供 800 megabytes/秒的頻寬,而讀取的資料實際上是在一個單獨的管線式匯流排上返回的。所以這是另外 800 megabytes/秒。但這仍然只有記憶體速度的四分之一。所以我們的顯示控制器實際上可以壓垮這個環,所以我們根本不用它。我們有一條通往 DER 控制器的旁路,但 DER 控制器是一個舊的設計。它已經運行了像一年了。它堅如磐石。

我們這樣做的原因,是因為我們不想花很多時間預先規劃這個設計。我們只是把這個東西「灌」給 Xilinx 工具,讓它自己「跑」。13 個核心的版本需要大約一個半小時來建構,如果你只對 Verilog 做一行的修改,這會很煩人。但當我們這樣做時,我們會把核心數量減少到五個,這樣就比較合理了。

重新審視過去的設計決策 - 範例六:封包交換網路 (資料中心)

我的最後一個例子不是計算機體系結構的例子。它是關於封包交換網路的例子。我今天很驚訝,ISCA 社群不認為網路是他們職責範圍的一部分。他們是微體系結構師。網路是其他東西。而我實際上不相信這是對的,因為有兩個領域,你幾乎無法將它們分開。一個是晶片內部。網路與晶片體系結構不同,還是它就是晶片體系結構的一部分?我會認為是後者。如果你不關注通信,你就不會很好地建構多核心晶片。正如我之前所說,儘管建構實際晶片的權衡取捨是不同的,你最終會建構類似環狀或網狀結構的東西。這就是單晶片雲端電腦所做的。為了繞過一些通信限制,傳輸資料本身就是昂貴的。

我觀察到,今天的巨型資料中心為我們重新審視區域網路提供了絕佳的機會。資料中心不是 Internet,我們不應該將它們視為 Internet。它們的差異如下所示。它們具有已知拓撲結構。原則上你知道資料中心中每台機器的名稱,因為你為它付了錢。它們的物理直徑非常小,這意味著互連的延遲相對較低。終端節點數量較少,可能幾萬個而不是幾億個。這樣的網路中的交換機間鏈路 (inter-switch links) 速度很快,今天已經是 10 gigabits/秒,到下週結束時可能就會達到 40 gigabits/秒,然後幾年後就會達到 100 gigabits。所以頻寬不再像過去那樣是個問題了。

另一件是,資料中心內部的網路流量模式與 Internet 中的完全不同,我們可以利用這一點。所以我提出的問題是,為什麼我們不應該使用電路交換 (packet switching)?公平地說,我們近期內不會在 Internet 中廢除封包交換。它運作得相當好,雖然不像我們有些人希望的那麼好,但替換的成本太高了。但在資料中心就不是這樣了。當我們開始建構資料中心時,我們是從零開始建構的,進行這樣的改變實際上並不會很糟糕。那麼,我們最初為什麼要採用封包交換呢?嗯,我們有一個媒介,它被單個站點或單個通信對站點利用不足,我們發現 3 megabits/秒的速度對於支援相當多的站點來說已經足夠快了,謝謝,所以那樣做更便宜。封包丟失時的重傳作為擁塞檢測方法運作良好,因為網路規模較小,而且在最初的網路中,我們也犯了同樣的錯誤,對吧,

...網路。你拿起電話,如果你無法建立連接,你就不會聽到撥號音,而當你建立連接時,你可能會聽到佔線訊號。它完全以相同的方式運作。你在呼叫建立時確定網路中的路由,此後直到你完成這次通信(我們在網路術語中稱之為流 (flow))之前,你都不需要更改它。在資料中心中,流有時候非常非常長。你在節點之間傳輸數百 megabytes 的數據,因此流存在很長時間,呼叫建立的開銷在這樣的大流上很容易被分攤掉。

使這一切運作的關鍵是,使呼叫建立時間遠遠小於傳輸時間。在資料中心,對於除了最微小的傳輸之外的所有傳輸,這都可以實現,因為鏈路很短,因此通過網路的延遲實際上非常低。所以很可能你可以在這樣的網路中以足夠高的速率建立和拆除連接,我們是可以做到的。這樣做的好處是,交換機的複雜度顯著降低。它們內部有排程器 (schedules)。它們實際上看起來像 1950 年代的電話公司時隙互換器 (time slot interchanger)。結果是,這些網路幾乎不需要緩衝 (buffering)。如果你今天購買一台大型封包交換機,你購買的晶片上就有幾十 megabytes 的緩衝區,以及數千個小型封包處理器,或者數百個,用來處理封包並決定將其路由到哪裡。像這樣的安排實際上會簡單得多。所以我們正在我的實驗室中研究這樣一個東西。有趣的是,我們實際上相信你可以用 FPGA 來實現這一點。目前不清楚你是否會在大批量生產中這樣做,但如果你想建造一兩個,今天的現代 FPGA 可能可以讓你實現。

這是一個可能的安排。基本上,這是為使用貨櫃的資料中心設計的。在整個中心,有 64 個貨櫃,每個貨櫃有兩排機架。每個機架有 41 個 1U 的插槽,用於放置電腦或其他東西。這個 1U 具有較低的頻寬,可能不止 1 gigabit,你可以想像,但可能更像是 2.5 gigabit,一個上行鏈路連接到機架中間的 Level 0 交換機。這些交換機將 20 個交換機匯聚到兩個 10 gigabit/秒的鏈路,連接到貨櫃邊緣的兩個 Level 1 路由器(也就是交換機,兩個是為了冗餘)。每個 Level 1 交換機有 64 根光纜,每根連接到資料中心中其他 63 個貨櫃,外加一根剩餘鏈路連接到網路運營中心 (network operations center)。這種連接方式重複了兩次,這樣 Level 1 交換機才能容錯。當它們發生故障時,你會損失該貨櫃一半的頻寬,但不會失去連接性。Level 0 交換機發生故障會導致你損失 20 個 CPU,這沒問題。只需將它們標記為死亡即可。

所以如果你不想進入這些貨櫃,你就不必進去。你可以讓裡面的東西報廢。然後當它們報廢,或者折舊了,或者有新模型出來了,你只需要將它們送回海對岸的製造商,按照你的新要求進行翻新。

正如我所說,這有點取決於呼叫建立 (call setup) 的良好運作。這由連接到 Level 1 交換機的路由控制器 (route controllers) 完成。它們實際上是 Level 1 交換機的一部分,但我不會詳細介紹。這可能真的行得通。如果行得通,它會為我們省下很多錢,並提高可靠性。我們的客戶也會更滿意,因為我們從這些大型交換機學到的一件事是,它們確實會故障。而且修復它們需要很長時間,因為我們實際上不知道它們裡面是什麼。

所以,錯行了。

結語與重大挑戰

所以讓我與你們分享一些最後的想法,然後我們可以去喝點酒或其他什麼。21 世紀的系統不同了。基於這些差異,我們大概應該重新思考一些基於新現實的設計決策。因為我們將繼續想要使用電腦來做新的事情。很抱歉,但我忍不住要提一些重大挑戰 (grand challenge),因為我認為確實存在重大挑戰。作為架構師,我們確實需要迎難而上。所以我們需要更仔細地思考它們是什麼。

正如我在演講開始時所說,你不會從我這裡聽到太多關於高性能計算的內容,因為那不是我主要工作的領域。但這裡有一些可能不是高性能計算應用,但我肯定想要擁有的東西,而且我認為許多其他人也會想要,而且他們會為此付費。為什麼我必須自己開車?如果你看看我的車,你會發現它在某個區域有點凹痕,這是因為我開車技術不太好。如果電腦在我當時開車在停車場裡的時候駕駛這輛車,它就不會那樣了。

我想要一台真正了解我的電腦。我的電腦一點也不了解我。它對我的偏好一無所知,除了也許我的搜索歷史或購物歷史,儘管網路上某處的人可能對此了解更多。我希望有一台能學習我的偏好並像同事一樣與我合作,而不是像奴隸一樣的電腦。那不是很棒嗎?我想要。

我希望有一台電腦能幫助我教育我的孫子孫女。我實際上曾研究過這個問題,結果發現它非常棘手。我們當時試圖教孩子們如何閱讀,因為閱讀實際上是一項基本技能。除了幾年前統計數據中的一個小波動,美國的閱讀分數在大約 30 年來年復一年地下降。這真的很嚇人,因為我們發現如果孩子們在四年級之前不能流利地閱讀,他們的一生就注定失敗。教育家們稱之為「四年級差距」(fourth grade gap)。我們試圖想辦法幫助孩子們克服阻礙他們閱讀的兩個事實。第一是電視,第二是他們父母晚上不再讀書給他們聽,因為每個人都有雙職工家庭。我們嘗試了幾種想法。例如,我們與許多教育家交流,了解孩子們實際上如何學習,並試圖建構一種遊戲類的東西,而不是之前建構的那種「寓教於樂」的東西。也許如果我們再次研究這個問題,我們會更多地關注機器學習,但我們沒能完全實現,所以那是一個有點失敗的專案,但我仍然希望有這樣的電腦。

我還希望有一台電腦,它實際致力於維護和增強我的隱私,而不是像今天這樣侵蝕我的隱私。

所以,這些是我認為將需要我們對我們今天設計和建造系統的方式進行相當大的改變的一些挑戰。但實際上,無論我們的領域發生什麼,我猜測計算機在未來仍然會像它第一個半世紀那樣充滿活力和令人興奮。實際上,我羨慕現在進入這個領域的年輕人,因為我相當確定他們將擁有和我一樣有成果和令人興奮的職業生涯。謝謝。

(掌聲)

問答環節

Joseph Torrellas (來自 Illinois): 您提到有很多您希望改變的事情。例如,沒有鎖定,沒有執行緒。

Chuck Thacker: 不,我完全沒有說那樣的話。我說的是,我們應該檢視那些決定。不一定非要改變它們,但我們應該仔細檢視它們,以決定它們是否真的是好主意,或者是否有其他替代方案會更好。

Joseph Torrellas: 假設我們想要改變它們。好的?假設...假設我們決定改變它們。中斷、快取一致性等等。這些事情有很多是雞生蛋還是蛋生雞的問題。

Chuck Thacker: 我知道。

Joseph Torrellas: 你不改變是因為整個系統的慣性。

Chuck Thacker: 我知道。

Joseph Torrellas: 在計算機歷史上有沒有這樣的例子,我們面臨過這樣的障礙,並且我們能夠通過完全改變事情來克服它們?

Chuck Thacker: 實際上,在計算機的發展過程中,我們已經多次重寫了我們的軟體。我認為關於遺留系統保護的事情有點像障眼法 (red herring)。它是...人們不願意改變,好的?有很多原因。他們陷入了非常舒適的窠臼。他們喜歡繼續做他們一直做的事情。你知道,使用 SPEC 基準測試來檢視微體系結構的改變。使用相同的模擬環境。這些事情很難改變。而且這樣做需要很多工作,不幸的是,有時候回報根本不會發生,或者需要更長的時間才能發生。我們現在的計算領域往往非常短期,就像企業往往很短期一樣。我們追求下一個季度的業績或下一個半年的業績。而我們真的應該思考長期生存和長期進步。我相信是這樣的。

Joseph Torrellas: 所以慣性並不比過去更大?

Chuck Thacker: 我說什麼?

Joseph Torrellas: 慣性並不比過去更大?

Chuck Thacker: 慣性?我認為現在實際上可能更大一些,因為領域規模更大了。當領域中沒有很多主題和很多人工作時,改變事情要容易得多。

不同姓名 (來自 University of Wisconsin): 不同姓名,來自 University of Wisconsin。Chuck,我在這裡。懂了。您的演講很精彩。我希望給您一些關於您如何選擇這些例子的見解。因為,例如,您...

對於許多事情來說,我們今天運行的應用程式並不能很好地受益於大量的處理器陣列。它們在像 Atom 這樣的東西上運行得很好。而且由於它們是以人為步調的,讓它們更快並沒有太大意義。現在,在桌面和筆記型電腦領域,我們可以做一些事情來改善使用者的體驗,其中一些是高性能的事情。例如語音識別、手寫識別等。但總的來說,你不需要一個 256 核心的多核心處理器來運行 PowerPoint。你根本不需要。

不同姓名: 您提到了我們應該重新審視和反思的六個改變。您提到的這六個建議。您認為其中有多少是我們正在看到的應用程式的變化所支持的?

Chuck Thacker: 我實際上不認為我今天談論的那些事情會需要應用程式發生巨大的變化。它們使得做不同種類的事情成為可能,但它們並不強制改變。它們只是提供了不同的... 你在作業系統的低層級會做很多不同的事情。但是應用程式會看到什麼不同嗎?嗯,可能不會。

不同姓名: 我的問題有點不同。您是否看到正在出現的應用程式的一些「怪異之處」(quirks),這些怪異之處也要求您提到的那種改變?正在出現的新興應用程式,而您碰巧看到了它們,它們真的不需要一致性記憶體。它們真的不需要封包交換。它們真的不需要虛擬記憶體。

Chuck Thacker: 我們今天在小組討論中討論過一些,對吧?我們如何向前發展?一種可能性是思考一個世界,在這個世界中我們沒有大型的同質性多核心機器或迷你核心機器。我們有很多不同的、有點更專門化的機器。建構這樣一個系統的關鍵在於找到一些可以被許多新興應用程式很好地利用的專門化,以證明工程投入是合理的。這是一個難題。我們可能會失敗。

Mark Ware (來自 Sun Labs Oracle): 我在左邊,在攝影機後面。懂了。恭喜您獲得這個當之無愧的獎項,感謝您帶來這場非常精彩的演講。我有一個簡短的評論,然後想請教一些建議。我和我的團隊實際上在事務記憶體和硬體事務記憶體方面有相當豐富的經驗,這是一個在 Sun 由這裡的一些人建造的晶片。Rock 晶片。對,對。所以您說得絕對正確,它不是萬靈丹。Rock 不是萬靈丹,事務記憶體永遠不會是萬靈丹,但在我看來,這似乎不是宣告失敗的標準。但是聽了 Daly 教授前幾天的演講,他鼓勵我們在投入太多時間之前考慮宣告失敗,所以這是我們一直在努力解決的問題。我們是去尋找下一個主題,在未來十年發表 500 篇論文,還是堅持下去,因為我們認為那裡有見解和潛力?我想也許您從您的職業生涯中學到了一些智慧。

Chuck Thacker: 嗯,我實際上不認為我們現在正在做的這種評估非常有價值。所以,是的,我們寫了 500 篇論文,我們發現軟體事務記憶體從根本上來說不夠快,無法在真實系統中實用。但這並不意味著它不是一個壞主意。發表 500 篇論文所做的工作的問題是,它阻礙了你編寫實際使用這些東西的應用程式。我認為這就是我們現在需要做的事情。而且,你知道,我相信「小步快跑」(tiny steps for tiny feet)。所以我們不了解這些東西。我們會建構一個合理的、有效率的、有界限的實現。我們可能會先寫一些玩具應用程式,可能先是基準測試,以嘗試理解它,因為它的運作方式與任何 STM 系統都不同。它會以合理的速​​度運行。所以我們也許可以學到一些東西。我們會發現它是個失敗,但我不認為現在是停止的時候。我確實相信「快速失敗」(fail fast),這也是 Bill 提出的。如果你發現你的研究沒有取得進展,你就應該停止,而不是變成一個對世界影響不大甚至沒有影響的東西的倡導者。我確實相信他這方面說得對。

Mark Ware: 是嗎?

Benjamin Lee (來自 Stanford University): 謝謝您的想法。關於您在 FPGA 方面的經驗以及原型開發和實際建造系統的經驗,您對如何將您在那裡開發的原型和經驗擴展到批量部署的系統有什麼評論嗎?您提到,在 Beehive 和交換機例子中,您在 FPGA 上以某種方式建造和原型開發了系統,但如果實際進行批量部署,您可能會以不同的方式建造。所以我不認為您填補了這個差距,我想知道您對此有什麼想法...

Chuck Thacker: 嗯,這樣做的想法是,當你用 FPGA 設計東西時,你實際上在兩個層次工作。一個是你正在嘗試為軟體提供的抽象層次,另一件事是你正在努力確保你可以在 FPGA 中實際讓這個東西運作,這意味著,正如我所說,你必須針對媒介進行設計。但與此同時,你必須記住你所做的任何事情是否會阻止進行真正的實現。例如,在我們的 HTM 項目中,我們無法像在真實系統中那樣快速清除 RAM。所以有些時候,系統會花費 128 個週期來清除一個 RAM。當我們看結果時,我們只需要將其考慮進去,並說,在真實系統中,這只需要一個週期。你必須這樣做很多次,但如果系統不是非常複雜,你或許可以解決這個問題。

Eric Sedlar (來自 Legacy Oracle): 我的同事 Mark 稱我為 Legacy Oracle。所以我的問題是,您提到了虛擬記憶體,對我來說真正有趣的是,如果您有一個應用程式,其資料處理的工作集超過了您擁有的物理記憶體量,您有兩個主要選擇。您可以在資料庫中管理這些資訊,或者您可以使用虛擬記憶體系統來管理。

Chuck Thacker: 讓我打斷一下。說出五個例子。五個應用程式,其數據工作集超過物理記憶體?數據工作集。您需要處理的數據量。

Eric Sedlar: 哦,您希望能夠單獨定址網站上的每個位元組資料。或者由全國任何地方的電話呼叫在過去 N 天內產生的記錄或類似的東西。這些現在大多是自動生成的數據。

Chuck Thacker: 是的,我...我認為這是一個有趣的應用程式空間。我們做了很多資料探勘。我們實際上不需要它。我的意思是,我們确实需要它,而且很多人挖掘的數據更多。但我認為我們實際上不需要它,所以也許您應該考慮一下您正在解決的這個問題,因為您可能會發現,如果您以稍微不同的方式解決,您也不會需要它。

Eric Sedlar: 嗯,我可以給您一個來自真實客戶的例子。你知道,您拿一個 100 megabytes 的 XML 文件,這並不難生成,然後通過解析器處理,它會變大約 100 倍,這很容易超過您今天家裡 PC 的物理記憶體量,您之前提到是 60 gigabytes。所以如果您有這樣的應用程式,這就是您想做的,並且您想做大量的 XML 處理,您想做樹遍歷或其他類似的事情,您有兩個選擇:使用虛擬記憶體來做,或者將這些數據放入資料庫中。所以對於這類事情,您可能會認為放棄虛擬記憶體不是一個好主意。

Chuck Thacker: 我沒有說它是個好主意。實際上,不,結果是在資料庫中處理這些事情比使用虛擬記憶體效果更好,我的理論是這基於應用程式中過度使用指標來使用虛擬記憶體,而在資料庫社群中,我們不希望人們使用指標。這兩者您都提到了。我有點想知道 20 年前情況是否不同,那是一個好主意嗎?

Eric Sedlar: 嗯,對我來說不是。20 年前,我厭惡使用指標,現在仍然如此。我的意思是,我是未來的人。我在大約 1977 年停止使用不安全、無類型的語言,並且再也沒有回去。

Chuck Thacker: 還有其他人嗎?顯然是招待會的時間了。謝謝。

(掌聲)