處理器微結構史話 第二章
【註:本文將刊登在中科院計算所計算機體系結構國家重點實驗室的內刊《體系結構國重快訊》第七期。】
美國海軍密碼破譯團隊出身的ERA,與第一台通用電子計算機 ENIAC 的主要設計者 John Mauchly 和 J. Presper Eckert 坐鎮的 UNIVAC ,這兩支團隊的先後加入的確令 Remington Rand 暫時超越了 IBM ,領跑整個市場[Rand vs IBM,1]。然而一山難容二虎, ERA 與 Eckert-Mauchly 團隊愣是擦不出火花,研發團隊的管理者Norris與ERA團隊部分核心成員最終選擇出走創辦 CDC 公司,也不由得令人扼腕嘆息。在開始講述 CDC 6600 同時開創超標量設計與亂序執行兩大里程碑技術的傳奇故事之前,讓我們再來回顧一下 Remington Rand 的落日餘暉。
第一章中講到,正值 Remington Rand 憑藉著 UNIVACⅠ 型計算機的卓越表現而一馬當先春風得意之時,龐大而笨拙的 IBM 也緩慢地點燃了自己的前進引擎。從 1940 年開始,IBM就在生產一些製表機(Tabulating Machine),毫無疑問地, IBM 也是嘗試推動計算裝置電子化、數字化的先驅者之一,但是尚不完全明朗的商業市場前景令 IBM 猶豫不決。直到 1951 年, IBM 的內部討論仍然認為通用電子計算機的市場前景黯淡,可能市場容量僅有幾十台規模[Rumour]。
拖拖拉拉的試水之作 IBM 701 型計算機直到 1953 年才進入量產環節,緊接著的,卻是意料之外的熱賣。一年後,這台比 UNIVAC Ⅰ 快了足足十倍的新型計算機現身於勞倫斯·利弗莫爾國家實驗室里,負責為 UNIVAC Ⅰ 編程的工程師們就開始坐不住了。由 John Mauchly 和 J. Presper Eckert 兩位宗師級人物主持設計的 UNIVAC Ⅰ 是這間馳名全球的核武器實驗室所購買的第一台計算機,當時交付使用才僅僅一年,這群工程師不久前剛剛在 Remington Rand 接受了為期三個月的培訓,學習如何操縱 UNIVAC Ⅰ 。值得一提的是,在計算機行業雛形初現的年代, UNIVAC Ⅰ 的地位猶如鎮宅之寶般金貴,新工程師通常需要經過為期三個月的安全檢查才能接觸到編程手冊,不難想見這群剛剛上手操縱 UNIVAC Ⅰ 的人也絕非阿貓阿狗之流,但是 IBM 701 的到來令他們迅速輸掉了驕傲的本錢,在那個高級語言尚未誕生的年代裡,每行代碼的編寫和測試所需要的時間是現在難以想像的,轉向新機器與新指令集的學習成本和人力成本都遠比現在高昂,他們開始擔心性能強勁的 IBM 701 加入實驗室後將導致自己剛學到不久的技術受到冷落,令自己失去工作。
當時的實驗室員工 Tad Kishi 在自己三十年後的回憶文章中寫到:實驗室里的工程師們分化成了 IBM 與 UNIVAC 兩大派別,這是他第一次也是唯一一次在實驗室里看到有一群人因為害怕失去工作而拒絕與同事分享信息[Tad Kishi]。 IBM 的新型機器所建立起的性能優勢,從 UNIVAC 工程師們的心理陰影當中可見一斑。
UNIVAC Ⅰ 於 1951 年發布,一時風頭無倆,但兩三年時間便風光頓斂,面對 IBM 的後發制人的首輪進攻即告潰不成軍,而 UINIVAC Ⅱ 則直到 1957 年才面世,中間足足有 6 年的空窗期。這期間到底發生了什麼事?
(圖註: Reminton Rand/Sperry Rand 公司的電子計算機產品線。不難看出, ERA 與 UNIVAC 兩大研發團隊雖然共享 UNIVAC 的牌子,卻是在研發上各自為戰,沒有交集)
IBM開始在市場上攻城略地的時候,與 Eckert-Mauchly 原本相互獨立的 ERA 並沒有對危難中的東家坐視不管。當時的 ERA 正在保密狀態下為軍方構建新型計算機,這個項目的成果在 1952 年獲准發布解密版本, ERA 雪藏的劍鋒便陡然出鞘。當ERA將這一項目的成果向 Remington Rand 管理層彙報過後, Remington Rand 的高管們震驚了,「低等生物」明尼蘇達人竟然不聲不響地拿出了一台可以與 IBM 701 相抗衡的新機器,這讓 Remington Rand 在慌亂中看到了反擊的曙光。 1103 系列不出意料地獨挑大樑,在市場上掛著 UNIVAC 1103 的番號攻城掠地,成為 Remington Rand 在這六年的空窗期中主要的反擊籌碼[UNIVAC 1103,1]。儘管銷售量與 IBM 701 型並駕齊驅的 UNIVAC 1103 已經儘力防守 Remington Rand 的市場陣地,但是與 IBM 7 系列機器渾厚堅實的研發後勁相比, Remington Rand 已經開始無力以相同的步伐快速更新自己的產品線,尤其在 1955 年到 1958 年這個時間段里, IBM 的 7 系列機器實質上已經沒有強力對手可與之抗衡。
在此期間, Remington Rand 的管理混亂問題也開始浮出水面。雖然獨具慧眼地收購了 Eckert-Mauchly 與 ERA 兩大團隊,但 Remington Rand 的管理層卻沒能夠將它們高效地整合在一起,事實上這兩支團隊與 Remington Rand 下屬的其他團隊一樣,處於各自為戰首尾不能兼顧的狀況, Eckert-Mauchly 被指派給商業通用市場,而 ERA 則主攻高性能科學計算,兩支團隊向不同的上級部門報告,信息直到 CEO 的辦公桌上才能匯總,在這種情況下,如果有一位能夠統攬全局的 CEO , Remington Rand 公司還是回天有術的,可惜當時的 CEO James Rand 被多方史料統一評價為領導才幹不佳,強敵來攻而 CEO 應對無能的危急時刻,團隊之間也出現了離心離德,本該成為 Remington Rand 救命稻草的 UNIVAC 1103 卻被身為同門的 Eckert-Mauchly 團隊反對進行市場推廣,因為害怕影響到 Eckert-Mauchly 團隊設計的 UNIVAC Ⅰ 的形象![Rand vs IBM,2]
(圖註:UNIVAC 1103 ,圖片來源ed-thelen.org)
也許是一絲自知之明的覺醒, Remington Rand 意識到自己即便窮盡手段也已無法和 IBM 的對抗,於是接受了 Sperry 公司的併購,二者於 1955 年合力形成的新公司名為 Sperry Rand ,而原本獨立的 ERA 與 Eckert-Mauchly 兩支團隊也終於合併到 UNIVAC 部門的統一旗幟下,老練精幹的 ERA 領導人 Norris 在高層的期望下,成為 UNIVAC 部門主管。用時下流行的一句話來說:然而並沒有什麼卵用, ERA 與 Eckert-Mauchly 兩大研發團隊的衝突已經「形成了一種模式」[Rand vs IBM,3],即便是見多識廣的 Norris 也感到難以駕馭。
在 UNIVAC Ⅰ 之後, Eckert-Mauchly 的人馬開始進行名為 UNIVAC LARC 的新型計算機研發,不幸的是, Eckert-Mauchly 此前的「光榮傳統」在新項目上「再創新高」,有心的讀者可能還記得史話第一章中曾提到, Eckert-Mauchly 在 UNIVAC Ⅰ 的研發上開銷超支了五倍、把本該在兩周內交付的輸入輸出設備拖延了兩年之久,令客戶通用電氣公司大發雷霆,而這回 LARC 的研發再度超支 6 倍,超時兩年零三個月,產品硬生生地拖到了 1960 年才上市售賣。之前 UNIVAC Ⅰ 型計算機的研發雖然不順,但上市後畢竟一度熱銷,所以最後還是能給 Eckert-Mauchly 作出一個「瑕不掩瑜」的正面評價,而 LARC 因為性能優勢過於微弱,只賣出了區區兩台,這就無論如何捂不過去了[UNIVAC LARC]。
ERA 團隊的處境也不妙, ERA 在 1103 機型之後被指派去開發 UNIVAC Ⅱ ,事實上是當了 UNIVAC Ⅰ 的接盤俠,因為 UNIVAC Ⅱ 要在 UNIVAC Ⅰ 的基礎上改進,而 Eckert-Mauchly 團隊寄來了 UNIVAC Ⅰ 的樣機和工程手冊之後便撒手不管,以「看熱鬧不嫌事兒大」的態度放任 ERA 團隊獨自理解其內部構造,直到 UNIVAC Ⅱ 磕磕絆絆地在 1957 年接近完成時才在管理層壓力下派來三個工程師給予協助,有了這樣令人瞠目結舌的窩裡斗行徑,便不難理解為何 IBM 在市場上一騎絕塵了。 UNIVAC Ⅱ 面世之後也僅賣出不超過三十台,而同時期的 IBM 705 售出了 175 台,已成摧枯拉朽之勢。
屋漏偏逢連夜雨,船破又遇頂頭風。 Eckert-Mauchly 團隊負責的 LARC 研發難產問題還沒解決, Norris 在 UNIVAC 主管的新位置上甚至都還沒有坐熱, CEO James Rand 就將自己的兄弟 Marcel Rand 橫插進來,奪走了市場營銷方面的決策權,這還不算完,這位 CEO 的血親又從貝爾實驗室請來一位退休管理層負責「協調產品研發「,這樣一來 Norris 就已等若架空,甚至連為 ERA 舊部爭取足夠研發經費的建言都被高層多次回絕,還有什麼理由留下呢?
1957 年 7 月, Norris 帶著一部分對老東家已經失望透頂的 ERA 團隊成員毅然辭職出走,嘗試籌集 60 萬美元的啟動資金來創辦自己的新公司,自己來主宰自己的命運。試圖撬動歷史的車輪的舉動是免不了要費力的,資金募集的過程起初異常艱難, Norris 與妻子一道,以破釜沉舟的決心砸鍋賣鐵投入了七萬五千美元的家庭資產,還說服自己的醫生朋友投入了兩萬五千美元,拖家帶口積蓄不多的創業員工們認購了一萬五千美元的股份。饒是如此,距離目標仍然相差甚大,最後不得不發動各方人脈,以一美元一股的價格吸引了 300 位股東參與,終於湊齊了數目。在明尼亞波利斯市區 501 公園大道的一間舊倉庫里,書寫了微結構發展史上傳奇一章的 Control Data Corporation 誕生了[CDC, 1]。
CDC 初創的經歷十分曲折,種種內憂外患接踵而至。這間舊倉庫是當地一家報社用來印刷報紙的,堆滿了紙筒,在裡面工作的員工經常要忍受印刷噪音的困擾。而這間舊倉庫開門迎接 CDC 員工們的第一天, CDC 所圈定的主架構師卻沒有出現。由於 Norries 領導的 ERA 團隊前身來自於美國海軍的密碼破譯團隊,隨後又為軍方開發新型計算機[UNIVAC 1103,2],因此軍方點名要求一部分關鍵成員不得離開 UNIVAC 部門以保障軍方項目順利進行,這其中就包含了明尼蘇達大學應用數學專業碩士畢業後在 ERA 團隊供職,當時年僅 32 歲的 Semour Cray ,日後業界共尊的超級計算機之父。不要忘了,在 Eckert-Mauchly 的 UNIVAC Ⅰ 被 IBM 的 7 系列機器打得潰不成軍的時候, Remington Rand 的陣營里唯一能頂住進攻的是 UNIVAC 1103 ,而 Semour Cray ,就是 UNIVAC 1103 的控制系統設計者。面臨軍方壓力的 Norries 不得不告訴 Cray 暫時不要加入 CDC 公司,以穩住軍方,否則 CDC 公司將不復存在。 Semour Cray 不情願地留在了 UNIVAC ,直到兩個月後,軍方已經不再需要他了,他發現賬務中自己的項目已經被列入了「雜項」之下,加盟 CDC 的綠燈才終於亮起[CDC,2]。
(圖註: Semour Cray 和他那句日後在高性能計算領域反覆提及的名言)
Semour Cray 在 CDC 公司的經歷,是不能用「如魚得水」這樣輕柔的辭彙來形容的,用「猛虎下山」似乎更為恰當一些。身為 CDC 公司 CEO 的 Norries 很快發現, Semour Cray 決不是一個自己能夠駕馭得了的普通工程師[CDC, 3]。從股本上來說, Semour Cray 僅為 CDC 的募股投入了五千美元,這是他當時僅有的個人資產,股份比例遠沒有 Norries 來得高,但是 Semour Cray 對早期 CDC 的技術決策卻擁有壓倒性的話語權, CDC 起步後第一個重大決定 —— 全力研發麵向科學計算的高性能計算機就是 Cray 一力促成的,這也是 Cray 的拿手好戲。
靈魂人物遲了兩個月終於歸隊,但擋在 CDC 面前的障礙仍沒有被掃清:缺錢。 CDC 不是花錢如流水的 Eckert-Mauchly ,作為參照, LARC 項目的報價為 285 萬美元,這幾乎五倍於 CDC 的總資產。如何在極為緊張的預算下研發一台在市場上足夠成功的計算機,成為了縈繞 CDC 團隊每個人心中的難題。好在,這是一隻由 Semour Cray 帶領的王牌團隊。 60 萬美元無論如何無法支撐太久,初創的 CDC 又沒有政府和軍方的扶持,於是 CDC 的員工們僅從公司領取自己的半數薪水以期盼它走得更遠。 Semour Cray 購買了一大堆被生產線上淘汰下來的廢品晶體管來製作新型計算機所需的電路,因為這種晶體管的售價是最便宜的,每個只賣 37 美分。
這一堆極為廉價的晶體管有著與它們的售價十分匹配的糟糕電氣特性, Semour Cray 硬是找到了自己的辦法用這種最次的晶體管構建出比別人更快的電路,但是很快,這種廢品晶體管就被買完了,但是 CDC 又買不起合格品,於是 CDC 的員工們就想辦法請元器件公司的銷售代表來 CDC 的工作地點吃午餐,然後拿著他們帶來的用於銷售演示的免費贈品晶體管來搭建電路[CDC 4]。
在這種境遇下, CDC 堅持了三年時間,直到 1960 年,這台誕生自廢品晶體管的計算機正式面世。它被命名為 CDC 1604 , 1604 = 501 + 1103 , 501 是 CDC 的最初工作地點,明尼亞波利斯市區 501 公園大道的編號, 1103 是他們的上一代產品,那台能夠阻擊 IBM 701 的 UNIVAC 1103 。
(圖註: Semour Cray 與 CDC 1604 ,圖片來源於 Charles Babbage Institute )
CDC 1604 在市場上取得了相當的成功,雖然在性能上它無法與 IBM 7 系列的最新型號 IBM 7090 相提並論,但是它價格低廉,設計簡潔,因此頗受歡迎。這從一個有趣的事例中可以得到印證。勞倫斯·利弗莫爾國家實驗室的兩位程序員在外參加會議時偶然見到了 CDC 1604 的指令手冊,立刻為其指令集設計的簡潔而傾倒,於是勞倫斯·利弗莫爾國家實驗室便購買了一台 CDC 1604 ,這一下令 IBM 如鯁在喉,因為勞倫斯·利弗莫爾國家實驗室從 1954 年到 1961 年馬不停蹄地連續購入了二十台計算機,其中十九台來自 IBM ,包括 IBM 701,704,709,7090,7094,7030 ,眼看就要湊齊7系列全家福,結果被一台 CDC 1604 壞了好事。 CDC 1604 是第一檯面向科學計算的晶體管計算機,在這個市場上獲得的初步成功讓 CDC 度過了艱難的初創期,開始有可觀的利潤,也為下一代產品的研發奠定了基礎。
這裡就不得不重提一下核武器實驗室的影響力了。在早期計算機的發展中,勞倫斯·利弗莫爾國家實驗室和洛斯·阿拉莫斯國家實驗室成為了非常重要的推動力量,隨著我們的故事線推進,這兩間實驗室還會持續不斷地出鏡。因為原子彈的實戰爆發力驚世駭俗,令美國政府和軍方如痴如醉,無奈原子彈實地試爆的政治壓力太大,試爆過程中的超高溫和超高壓又大大限制了科研觀測手段,因此購買高速電子計算機進行核爆模擬就成了極具誘惑力的選項。承接核武庫的研發任務之後,這兩個實驗室成為早期計算機的重要買主,甚至在某些型號上佔據一半購買量,間接推動了計算性能的飛速提高[Los Alamos and Lawrence Livermore]。甚至當時有一個笑話說,一台 IBM 7094 在運輸過程中從卡車上翻出,跌下了懸崖,但是這台機器墜落到懸崖底部之前,下一台機器就已經運到了。
當時的計算機單價基本在數十萬美元至數百萬美元的區間上,從近乎瘋狂的購買中不難發現這兩家實驗室獲得的資金支持規模有多麼龐大,因此兩個實驗室是各方爭奪的重要客戶,每一台機器的訂單都是一塊令所有人垂涎的肥肉。當時的計算機市場被分為兩個大塊,其中一塊被稱為商務市場(business market),這一塊市場對性能要求不高,但是需要計算機支持一系列處理字元串和各種規格數據的指令,因此早期計算機,例如第一個獲得市場認可的 UNIVAC I ,就是採用一套比較複雜的指令集編碼,後來被稱為 CISC ;另一塊被稱為科學計算市場,市場規模要小很多,重要早期客戶就是這兩家核武器實驗室,這一塊市場隨後演變為今日我們所說的高性能計算市場,它的特點是對計算速度(主要為浮點計算)有著極高要求。這也是 Semour Cray 所鍾情的地方。
Semour Cray 是一個為高性能計算而生的人。他從骨子裡開始狂熱地追求至高的計算速度,不惜一切代價,包括兼容性[CDC,5]。這一價值觀剛好符合核武器實驗室當時的胃口,他們揮金如土,極度渴求更快的計算速度,至於兼容性,只不過是隨時可以犧牲的附件。而 CDC 的管理層包括 Norris 在內,都沒有這份執拗, Norris 認為 CDC 應該趁熱打鐵進攻商務市場獲取更高利潤,而商務市場上很難接受一個新型計算機不兼容以前的軟硬體,而計算速度又不是商務市場的痛點。這使得剛剛成立不久的 CDC 內部開始出現分歧,以 Norris 為代表的管理層指派了另一個小組開始開發 CDC 3600 ,這台機器以 CDC 1604 的繼任者身份出現,與 CDC 1604 部分兼容,使用複雜指令集設計,旨在打入商務市場。而 Semour Cray 則開始嘗試設計二十倍性能於 CDC 1604 的超高速計算機,編號 CDC 6600 ,力圖做到世界第一。如果有人正在好奇,如果 CDC 1604 使用的元器件不是廢品, Semour Cray 和他的團隊能把速度提到多快, CDC 6600 的目標就是答案了。但最高速度的代價也是十分高昂的。 Semour Cray和他帶領的工程師團隊們重新審閱了CDC 1604的設計圖紙,認為單純憑藉改良 CDC 1604 的設計將無望達成目標,於是 CDC 1604 的設計被完全拋棄, CDC 6600 的設計從一張白紙重新開始,完全不兼容前代產品。這意味著, CDC 6600 一旦失敗,將會是完全沒有退路的慘敗。
與此同時, Semour Cray 與管理層的關係正在逐步惡化。 1962 年, Cray 與追隨他的工程師們[CDC,6]搬到了自己的出生地,威斯康辛州的奇珀瓦福爾斯市(Chippewa Falls)[Wisconsin]。從明尼蘇達搬去威斯康辛的決定有多重因素的影響[CDC,7],管理層決定上馬 CDC 3600 的計劃不可避免地對 Semour Cray 造成了壓力,如果 CDC 6600 失敗,將意味著 Semour Cray 的話語權被削弱,另一方面是來自公司行政,以技術能力見長的 Semour Cray 一生都背著不善與管理層打交道的名聲,他厭惡參與公司管理,需要與 CDC 總部拉開一段距離來保證自己不受公司行政事務干擾,搬去威斯康辛的一百英里距離從某種程度上來說剛剛好,這個距離足以令一些閑雜事務望而卻步,但是一旦有緊急事務,總部還是能夠找到他。這種對管理層的輕視還體現在其他方面,當 Norris 要求 Semour Cray 做出公司五年的技術目標和規劃時,他只回復了兩句話:總體目標,構建世界上最強大的計算機,第一年目標,完成前述目標的五分之一。但總的來說, Semour Cray 與 Norris 之間仍然有著相當程度的相互理解,搬遷的決定就得到了 Norris 的認可。
(圖註: Chippewa Falls 當地留下的印有 Cray 字樣的標誌。來源chippewa.com)
奇珀瓦福爾斯實驗室(Chippewa Falls Lab)建立後, Semour Cray 身上的壓力並沒有因此縮減多少,因為 CDC 3600 已經於 1962 年下半年上市,並且得到了勞倫斯·利弗莫爾國家實驗室的訂單。一旦 CDC 6600 失敗,後果將不堪設想,輕視管理層的 Semour Cray 在外人眼中看來將不僅僅是傲慢,而且是無能。
但 Semour Cray 又如何會輕易低頭,他毫無懼色地堅持了自己最初的目標。新設計將拋棄 CDC 1604 上使用的鍺基晶體管,轉而使用仙童半導體剛剛出品不久的硅基晶體管,這種晶體管將提供快五倍的開關速度,使得電信號通過晶體管組成的邏輯門時耗費的時間大大縮減。晶體管切換速度提高後,連線延遲又成了問題, CDC 6600 內部的電線極為龐雜,總長度以英里計算,在高速時鐘驅動的電路里,即便電信號以原光速傳播,也無法達到時序要求,據估計當時的計算機內部關鍵處理路徑上有 25%~30% 時間浪費在了線上電信號傳輸[CDC,8],為此 CDC 6600 將所有的電路板元器件密度提高了十倍以縮短總連線長度,但是這樣一來,散熱就成了問題, Semour Cray 又找來了一位以前從事電冰箱製冷系統設計的工程師,為 CDC 6600 設計了一套基於氟利昂的散熱系統!
(圖註: CDC6600 的結構框圖,出處見Uniprocessors and Vector Processors)
使用新的器件帶來了五倍的速度提高,這使得 CDC 6600 內部的指令調度單元能夠以 100 納秒的時鐘速度朝算術邏輯單元發射指令,這一速度已經足以傲視群雄,但是相距設計目標仍有一段不小的距離。時鐘節拍只是一方面,另一面來說,每個時鐘節拍當中完成的工作量能不能有所提升呢? Semour Cray 和他的團隊將目光投到了機器的體系結構上。一個直觀的想法是,如果中央處理單元內部集成數目較多的運算部件,同時進行多次運算的話,速度也可以成倍提高。工程師們分頭設計集成了十個運算部件,加法,乘法,除法,移位,邏輯,分支,一應俱全,這些計算部件計算一次需要 300~400 納秒,理論上可以重疊執行 3~4 條指令,速度便提高 3~4 倍,但是這一速度優勢僅僅是鏡花水月,在實際執行流程中會打上很大折扣。
考慮這樣的一個四則運算序列 (1114 + 303)× 520 ,在我們算出 1114 + 303 的結果之前,是不能開始進行後續乘法計算的,這意味著我們在進行加法計算的時候,乘法單元是閑置的,如果這種運算之間的順序在實際執行過程中不能被打破的話,多個計算單元的利用率不會有預想的那麼好。這是限制多個運算單元利用率的最大桎梏之一:指令的執行必須按照一定順序進行。從常理上看,打亂指令的執行次序是頗具一些反直覺意味的,從 ENIAC 誕生到 CDC 6600 面世之前,這一桎梏牢牢套在架構師們身上接近 20 年時間,無人能將它打破,儼然成為禁區。
然而,如果把運算序列擴充為 (1114 + 303)× 520 ÷ 601 ,就不難發現這個桎梏留下的縫隙。乘法之後的除法指令是可以執行的,也就是說同時計算 1114 + 303 與 520 ÷ 601 的結果,最後再計算乘法,這是規則所允許的,這意味著我們可以打破原定計算次序,在利用加法單元的時候還能同時利用除法單元,實現同時執行兩次計算。這個簡單的計算序列實際上揭示了程序指令序列中一個廣泛適用而深刻的規律:指令序列中的後繼指令經常不存在與前驅指令的關聯性,可以與前驅指令並行執行,甚至超前執行。因此,指令的執行順序就被打破了。只要後面的指令與前面的指令不產生相關,例如不同時佔用加法器,不使用同一個寄存器,且計算所需的源數據已經產生,就可以無視原定順序把它送入計算部件開始執行。 Semour Cray 團隊中的一位天才工程師 James E. Thornton 在這一難題的攻關上脫穎而出,他設計了 CDC 6600 結構框圖中的 Scoreboard 部件,使得 CDC 6600 在指令執行過程中能夠動態追蹤每條指令之間的相關性,發掘所有不存在相關的指令並打亂原有執行次序,將滿足條件的後繼指令提前發射進入運算部件。
(圖註:James E. Thornton在自己的著作中繪製的亂序執行示意圖)
這一優化方法被後世稱為「亂序執行」,而不能做到亂序執行的處理結構則被稱為順序執行,在幾乎同等條件下進行比較,亂序執行的性能往往領先順序執行一倍甚至更多[ASPLOS'13],因此九十年代後湧現的現代高性能處理器中,大部分結構是亂序執行的堅定踐行者。使用多個運算部件實現每個周期執行多條指令的方法隨後演變為超標量執行,這與亂序執行一樣成為現代高性能微處理器的另一項顯著結構特徵。以半個世紀後的現代眼光來看, CDC 6600 的結構框架並沒有完整地實現亂序執行和超標量執行[CDC, 9],但是這兩項偉大技術在它身上首現雛形,因此 CDC 6600 被公認為亂序執行和超標量執行兩項偉大技術的先驅。 Semour Cray 帶領的團隊在 CDC 6600 這台堪稱是天神下凡一般的機器上實現了結構設計的兩項突破,值得永載史冊。出於對 CDC 6600 的敬意,亂序執行中指令發射這個關鍵步驟的描述術語(issue)使用了 CDC 6600 設計文檔中的原始稱呼並一直保留至今,而負責追蹤指令相關性的部件也往往被稱為 Scoreboard , CDC 6600 也被體系結構領域影響力最大的教科書《計算機體系結構:量化研究方法》收錄,作為後世的學生們研習亂序執行設計的第一個範本,關鍵部件 Scoreboard 的設計者 James E. Thornton 也由此一舉成名,於 1994 年將體系結構領域最高獎 Erkert-Machuly 獎收入囊中。
有了這一大段讚譽之詞後,筆者仍舊認為 CDC 6600 的設計者們超越時代的透徹洞察力沒有被完整描述,甚至有些尚未被已經浩如煙海的史料提及。例如,筆者在閱讀由 James E. Thornton 所寫,出版於 1970 年的 《Design of a Computer - The CDC6600》 時,發現它的 instruction stack 已經在相當程度上具備了 Intel 於 2010 年引入 SandyBridge 微結構的 loop cache 的功能:識別跳轉指令,並嘗試讓每一次循環指令的取指從 instruction stack 中完成;在十個運算單元的執行後端上提供點對點的功能單元數據前遞(Bypass)網路開銷過大, CDC 6600 選擇將運算單元分為多個集群(cluster),數據前遞網路以集群為基礎構建,大大降低了複雜度,而這一設計也出現在時隔 30 年後的處理器微結構經典之作 Alpha 21264 身上。
在全新的基礎元器件上,如此集中地加入了這麼多對當時的時代來說顯得頗為超前的結構設計,使得 CDC 6600 的計算速度領先所有競爭對手第一個突破了 MFLOPS 界限,被後世公認為第一台超級計算機。 1963 年 8 月, CDC 公司召開 CDC 6600 產品發布會,同年 10 月, James E. Thornton 就與自己的妻子踏上了愛爾蘭悠閑度假的旅途,而 CDC 6600 則如一支離弦利箭,迅速穿透並撕裂了 IBM 的市場防線,曾經把 UNIVAC 壓得喘不過氣來的 IBM 7 系列最新型號 7090 和 7094 在 CDC 6600 壓倒性的速度優勢面前一觸即潰,兵敗如山倒, 7030 Stretch 的價格更是從單台 1300 萬美元暴跌至單台 780 萬美元,並且早早退市。而單台售價 800 萬美元的 CDC 6600 在 1970 年到來前就收到了超過一百台訂單, CDC 的身價也隨之直上雲霄,從 1 美元 1 股衝上了 300 美元 1 股的巔峰。
(圖註: Semour Cray 在 CDC 6600 發布會上。圖片來源於drbobbs.com)
7 系列機器的全線潰敗令 IBM 上下都感到恥辱。 IBM 董事會主席托馬斯•沃森在 1963 年 8 月 28 日的一份備忘錄中寫道,「 CDC 6600 的開發團隊一共只有三十四人,而且還包括一個守門的……這些人中, 14 個人是工程師, 4 個人是程序員,只有 1 個人有博士學位……與他們相比,我們的投入如此之巨,難以理解為何我們沒能拿出最快的計算機,失去了領先地位……」。這份備忘錄被後世稱為「守門人備忘錄」[CDC,10],CDC 6600以三十四人的小研發團隊擊敗 IBM 的故事從此廣為流傳。
如同 IBM 壓制 UNIVAC 一樣, CDC 的領先優勢之大也令 IBM 一度不知所措。耗費巨資研製,曾被寄予厚望的 7030 Stretch 根本不是 CDC 6600 的對手,而下一代機器還停留在圖紙上,這可如何是好? IBM 不得不採取了一些不太光彩的營銷手段來與 CDC 公司爭奪客戶。 IBM 的營銷人員有意無意地散播謠言,誇大了 CDC 6600 的故障率,並且利用 CDC 公司的管理層人事變動聲稱 CDC 快要破產,機器壞了都沒有地方可以返修,以此來動搖客戶購買單價較高的 CDC 6600 的決心。在造謠中傷 CDC 6600 的同時, IBM 還宣稱自己的新型機器 IBM 360 即將推出,性能將與 CDC 6600 不相上下,但實際上 IBM 360 當時連原型樣機都沒有開發完成,許多 CDC 的客戶和潛在客戶被 IBM 誘騙簽署了購買 IBM 機器的合同。 Norris 聞訊怒不可遏,提起反壟斷訴訟,傾盡全力與 IBM 的龐大律師團隊周旋,而 IBM 使出了這種下三路招數之後也自覺面上無光,暗地裡也在加緊 360 系列的開發。
【注釋與參考文獻】
[Rand vs IBM,1] 截止到兩次收購前的二十世紀四十年代末期, Remington Rand 本身就已經具備與 IBM 相抗衡的實力,當時其營收僅落後IBM 9.5%左右。 ERA 與 EMCC 兩支團隊被 Remington Rand 收購前都有自己的電子計算機研發計劃,且 UNIVAC I 型獲得空前成功,筆者閱讀到的幾乎所有史料都認為 Remington Rand 在通用電子計算機上領先 IBM 一步起跑。 但 Remington Rand 在隨後幾年中沒能繼續鞏固優勢, Norris 事後評論說:他們幾乎是原地不動目睹 IBM 超越了自己。
[Rand vs IBM,2] 前 Remington Rand 員工 Ronald Q. Smith 參與撰寫的這篇回憶文章是本章節中許多八卦故事的出處。
[Rand vs IBM,3] 前 ERA 員工 Erwin Tomash 和 Arnold A. Cohen 撰寫的回憶文章也記載了那段時間裡的許多八卦故事。順帶一提, Arnold A. Cohen 是 volatile (易失性)和 non-volatile (非易失性)兩個計算機體系結構標準術語的先驅,這兩個術語是 Cohen 在做一場關於磁鼓內存的 Tutorial 時引入的,非易失性內存是現在體系結構學術界最火爆的研究熱點之一。
[UNIVAC 1103,1] 有心的讀者可能還記得,史話第一章中曾提及, 1103 開發接近尾聲時 Erkert 還曾橫加干涉。 1103 的性能震驚管理層一事並非筆者誇張,《 IEEE 計算歷史年鑒》上先後有兩篇文章獨立地提及了 1103 的內部驚艷亮相,其中一篇來自[Rand vs IBM,3],另一篇則來自 Norries 的昔日顧問 James Worthy 。值得一提的是, UNIVAC Ⅰ 被認為是第一台實現了異常處理的計算機,而 1103 的後繼改進型號 1103A 通常被認定為第一台實現了程序中斷的計算機。中斷功能是在 NSCA (也就是後來的美國國家航空航天局 NASA )請求下加入的,用來控制 UNIVAC 1103 在批處理任務和風動數據收集之間切換。
[UNIVAC 1103,2] UNIVAC 1103 實際上是這台軍用新型計算機的民用版本,軍用版本名為 Atlas II 。
[UNIVAC LARC] LARC 實際上是 Livermore Advanced Research Computer 的縮寫。公平地說 LARC 也並非一無是處,它率先使用了interleaved memory,也就是將內存拆分為多個 bank ,實現並行交錯讀寫,現代高性能微處理器內部的高速緩存也無一例外地使用了這種設計。例如第一代 Intel Core i7 的一級數據緩存、一級指令緩存、一級指令 TLB 和數據 TLB 、二級緩存都被切分為 4-8 個 bank 。
[CDC,1] 有史料稱 CDC 是第一家以公開募股方式建立的通用電子計算機公司,見[UNIVAC 1103,1]中 James Worthy 的回憶。
[CDC,2] Cray 後來接受採訪時說,他發現自己的項目被列為" 999 Miscellaenous and Other "之下,隨後便安全加入 CDC 。
[CDC,3] Cray 在採訪中有這樣一句話(譯):「 Norris 是老大,他是這樣的一個領導者,就是大家感覺如果 Norris 正在做這件事,那麼這大概就是可以做的。但是我不需要這個,因為我知道我自己想要幹什麼。這和 Norris 想要的不太一樣,但是我們相處沒有問題,他非常渴望看到公司成功。」
[CDC,4] 這段令人心酸的創業經歷出自 Semour Cray 傳記。購買廢品晶體管搭建 CDC 1604 的故事得到了 Semour Cray 本人的確認,見[CDC,2]
[CDC,5] Semour Cray 有一種「從白紙開始的」設計理念,這成為他的職業生涯的標誌之一,因為他主持設計的每一台超級計算機幾乎都是推翻一切從頭開始。 Cray 在去世前兩年接受採訪時也談到這一設計理念,並總體上持正面評價,他認為這一設計理念會增大項目風險,但是可以帶來長期利益。見[CDC,2]。
[CDC,6] 十四位工程師和四位程序員賣掉了自己在明尼蘇達州的房子,在威斯康辛購置了新家。如此忠心耿耿地追隨 Semour Cray ,可見其在工程師隊伍中的人格魅力。
[CDC,7] 據 Semour Cray 傳記記載,搬遷還有著躲避核彈轟炸的考慮。當時全世界已經進入冷戰氛圍,各國都在嘗試獲取核武器,以色列購買了一台 CDC 1604 ,也被認為是開發核武器的信號,因為當時的高速電子計算機一般會被作為這個用途。設計高速計算機,與兩大核武器實驗室關係親密的 CDC 難保不成為大戰來時的轟炸目標,而偏僻的 Chippewa Falls 被核襲擊的可能性較小。
[CDC , 8] 這一估計數字來自於 CDC 6600 主要設計者之一 James E. Thornton 親筆撰寫的文章。
[CDC , 9] 準確來說, CDC 6600 未能完整實現亂序執行的遺憾在於單純依靠 Scoreboard 不能提供寄存器重命名,使得指令亂序調度能力受限,而 Scoreboard 每個周期只能 issue 一條指令,每個周期也只能從運算部件 commit 一條指令,因此 issue width 和 commit width 都只有 1 ,整個執行流水線中只有 execution width 大於 2 ,並不完全滿足超標量執行在整個處理流程中保持大於等於 2 條指令處理能力的定義。
[CDC,10] 這份備忘錄被拍照傳到了網上,圖片原件可見 computerhistory.org
[Rumour] 參與了多個 IBM 早期計算機研發項目的 ByronE. Phelps 在自己的回憶文章中提及了 IBM 內部討論中對潛在市場規模的擔憂。然而值得一提的是,坊間流傳著的所謂「 Thomas Watson 曾斷言全世界只需要五台通用電子計算機」的說法也有些斷章取義的味道,據 IBM 的 FAQ 文檔, Thomas Watson 所說的原話大致為:「 IBM 曾經為這樣的計算機(亦即 IBM 701 ,譯註)制訂了計劃,並將這個計劃送至了全美範圍內的 20 個潛在客戶手中,我想告訴你們的是,這台計算機租借一個月就需要 $12000 至 $18000 ,所以這不是那種可以四處熱銷的機器,原本以為只能賣出去五台,但是由於我們的推銷,最終賣出了 18 台。」
[Tad Kishi] Tad Kishi 在這篇回憶文章中講述了自己在 Lawrence Livermore 國家實驗室參與 701 型計算機編程的經歷,當中提到 UNIVAC 和 IBM 兩台機器帶來的內部分化。
[Los Alamos and Lawrence Livermore] 科技史作家 Donald Mackenzie 採訪了 Los Alamos 和 Lawrence Livermore 兩大核武器實驗室的多位前僱員之後,在他的文章中系統闡述了核武器實驗室在早期計算機演進中所起的助力作用。
[Wisconsin] Wisconsin 這塊土地上似乎有著天生的計算機體系結構血統, CDC 公司的 Chippewa Falls Lab 開創了亂序執行和超標量執行,而 University of Wisconsin–Madison 從上世紀八九十年代以來也一直是體系結構領域的超一流牛校,旗下兩大現役王牌教授 Guri. Sohi 和 Mark Hill 以及現已榮譽退休的 James E. Smith 教授都在處理器微結構領域做出過卓絕貢獻。
[ASPLOS'13] 體系結構頂級學術會議 ASPLOS 2013 最佳論文獎授予了一篇研究亂序執行與順序執行的論文,這篇論文總結先前研究認為,最頂尖的順序執行設計也往往不及亂序執行的一半性能,但是如果把經過亂序執行調度的執行序列經過處理後餵給順序執行處理器,則可以將差距大幅縮減至 12% ,從而有可能以低設計複雜度、低功耗的順序執行設計提供類似於亂序執行的性能。