計算機微體系結構,指的是計算機的核心部件中央處理器CPU的架構。目前市面上CPU的型號令人眼花繚亂,計算機的類型也千變萬化,但其中也有相對不變的因素,例如CPU的架構。本文細數從1964年開始的計算機發展史,看56年來計算機公司的繁榮衰敗,架構師的利弊權衡,學術研究的潮流動向。
1964 年前的計算機大多數是為政府的軍事部門或者大公司定製的,幾乎沒有兼容性可言。而在1964年IBM發佈了System 360系列計算機,該系列有多達14 個Model,並且相互之間全部兼容。用戶可以根據實際需要從小型機逐步升級,同時不需要重新編寫軟件,這給市場帶來了強烈的震撼。在我們現在看來,計算機的兼容性是一個幾乎默認的事情。世面上種類繁多的計算機使用著種類繁多的芯片,但是都能運行Windows或Linux操作系統,安裝軟件只需要指定操作系統而不用指定計算機的型號。但是在當時,哪怕是同一家公司生產的計算機也不能做到相互兼容。IBM 360系列首次提出了指令集的概念,計算機的設計者和使用者約定好指令集,然後架構師想盡一切辦法提高指令集的性能,而使用者使用這些指令編寫代碼。當計算機升級換代的時候,只要仍然支持原本的指令集,之前寫好的軟件就能順利執行而不需要任何改動,這就是指令集兼容帶來的好處。指令集的提出統一了當時計算機設計山頭林立、各為其政的局面,在數據存儲格式、IO設備接口、定點和浮點數字表示、ASCII和BCD編碼、內存對齊、通用寄存器和累加器等方面制定了標準,有些後來被IEEE採納,成為國際通用的標準。當年秦始皇統一天下之後重要的事情之一就是統一貨幣、文字、度量衡,IBM 360系列計算機擔任的也正是這樣的角色。計算機的通用性使得其使用更加方便,整個市場水漲船高,IBM也賺的盆滿缽滿,一舉奠定了“藍色巨人”的地位,統治計算機領域幾十年。IBM 360系列計算機是計算機領域的里程碑,計算機有了發展的主線,即指令集。計算機快速發展的56年就這樣開始了。
從1964年的IBM 360到1976 的Cray-1,計算機領域幾乎一直是大型機和巨型機的天下。這一時期的計算機的體型、性能和價格都居高不下,是政府機關、企業部門的專用設備,但其中的技術在今天仍然值得學習和借鑑。同處這一時期的DEC 公司則是小型機領域的領頭羊,從8 位的PDP-8 到16 位的PDP-11 再到32 位的VAX-11,DEC 公司的小型機飽受市場讚譽。但不幸的是,長江後浪推前浪,小型機市場逐漸被後起之秀微型機侵佔,最終慘淡收場。1971 年Intel 公司推出了其第一款微處理器4004,當時還僅僅用於便攜式計算器的計算單元。經過幾代產品的打磨,1978 年的8086 最終架構穩定,成為Intel 後續幾乎所有微處理器芯片的源頭,今天Intel 最先進的微處理器仍然支持8086 指令。
1980 年到1995 年的這段時期,是微處理器性能飛速發展的時期。隨著集成電路技術的發展,許多大型機中使用的技術逐漸可以在微處理器上實現,聚焦提升微處理器的種種技術和討論就此拉開帷幕。科學家和工程師全力提升微處理器的性能,極儘可能的挖掘並利用程序的局部性和並行性。指令集作為硬件和軟件的接口,首當其衝面臨變革,RISC 從此成為微處理器設計的基本技術。隨後,有關深入挖掘指令級並行的技術[1] 如雨後春筍一般被廣泛的提升和討論,伴隨著摩爾定律的加持,技術也有了充分發揮的空間。然而好景不長,1990 年的一篇技術報告給當時的人們當頭棒喝:理論上存在這樣一個極限,足夠多的晶體管徹底挖掘了程序中所有的指令級並行性。十年之後果然如此。這期間,新的負載出現使得人們開始轉向研究挖掘數據級並行和線程級並行的技術。經過十幾年的技術沉澱,出現了很多教科書級的微處理器設計。我們考察了1996 年到2003 年間主流的微處理器架構,包括MIPS R10000,DEC Alpha 21264,Intel Pentium 4,AMD Opteron 和IBM Power4。這些微處理器具有較為全面的指令級並行的技術,值得被體系結構的科研人員仔細研究。相關文獻大多發表在體系結構的頂會MICRO 上,含金量很高。另外,對比同一時期同一技術思想在不同指令集架構的微處理器上實現也是一件非常有意思的事情。
最近二十年體系結構的研究出現了一些新的趨勢。
首先,功耗逐漸成了一個大問題。晶體管的尺寸太小導致Dennard Scaling 定律失效,電壓問題不再是一個僅依靠工藝進步就能解決的問題了。一方面移動設備的激增,例如筆記本電腦、平板電腦和智能手機,續航能力成了評價產品的重要指標。另一方面對於高計算密度的數據中心而言,電費支出逐漸佔據了成本的大頭。這對微處理器的功耗控制提出了更高的要求。
其次,安全問題日漸突出。出現了許多針對體系結構的安全漏洞,例如“熔斷”和“幽靈”,以及近期發現的由於DVFS 功耗控制所引發的漏洞。這些安全問題無法從軟件層面避免,本質上來說是體系結構設計時就埋下的隱患。因此有關體系結構安全方面的研究也越發熱門。
如同多媒體應用的出現促進了微處理器在向量指令方面的增強一樣,新興負載也在持續推動著計算機體系結構的發展。新的應用例如網絡分析、人工智能、遊戲、圖形圖像設計和虛擬貨幣,對算力提出了更高的要求。通用處理器在解決這些問題上並不能達到令人滿意的結果,專用芯片再次被提升日程。針對具體的應用如何優化性能和功耗成為芯片設計們新的考驗,由此誕生了各類加速芯片,例如GPU、TPU、FPGA、ASIC等。更進一步地,如果能夠降低傳統芯片設計的高門檻和巨大的前期投入,那麼在面對新興負載時就能快速反應,芯片便捷開發的概念逐漸散播開來。
單核微處理器的性能發展逐漸緩慢,人們開始尋求新的提升性能的方法。一個基本的想法就是使用多個微處理器核心,片上多處理器的就此誕生。片上網絡的重要性也日漸凸顯,同樣要從性能和功耗兩方面考慮。同樣的,既然可以互連多個微處理器核,那麼互連多個微處理器的想法也是順理成章,這就是並行計算機。一般而言,為了簡化系統的編程複雜度、提高通信的效率,在小規模的並行機上大多采用共享內存空間的方法。但由於各個微處理器都有自己的Cache,修改其中的數據如果不能儘可能的傳播給其他微處理器就會引發數據不一致的問題,繼而引發了有關Cache 一致性方面的研究。
最近二十年是互聯網企業大發展的時期,為了更好的提供企業級的數據存儲和計算的能力,Google、Amazon、Facebook、騰訊、阿里、百度都各自建立起自己的數據中心,雲存儲、雲計算的概念被廣泛的討論。對數據中心而言,又有了許多新的問題,例如如何進一步提高計算效率和計算密度、更好的散熱、管理設備故障、整合異構資源、協調分佈式系統等問題等待著人們去解決。
從1964年到2020年,希望梳理的歷史能夠成為一面明鏡。
[1] John L. Hennessy and David A. Patterson. Computer Architecture, Sixth Edition: A Quantitative Approach. Morgan Kaufmann Publishers Inc., 2017.