關於CPU、指令集、架構、晶片的一些科普

NIUZI_J發表於2016-10-13
作者:王強
連結:https://zhuanlan.zhihu.com/p/19893066
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

隨著智慧裝置的廣泛普及,這幾年媒體上越來越多的出現關於“架構”“ARM vs x86”“晶片研發”的相關內容。很多消費者和愛好者面對這些以往不太常見的資訊時就會迷惑甚至產生誤解。其中一組比較容易被混淆的概念就是CPU、架構、指令集與晶片。本文試圖用較淺顯的文字闡明它們的關係與區別,糾正一些常見的錯誤認識與觀點。

學過計算機基礎知識的朋友都知道CPU的含義,亦即中央處理器,是負責計算機主要運算任務的元件。一般習慣把CPU比喻為人的大腦。而瞭解略深的使用者會聽說CPU有x86、ARM等分類,前者主要用於PC而後者主要用於手機平板等裝置。那麼這裡的x86、ARM指的是什麼呢?

CPU執行計算任務時都需要遵從一定的規範,程式在被執行前都需要先翻譯為CPU可以理解的語言。這種規範或語言就是指令集(ISA,Instruction Set Architecture)。程式被按照某種指令集的規範翻譯為CPU可識別的底層程式碼的過程叫做編譯(compile)。x86、ARM v8、MIPS都是指令集的代號。指令集可以被擴充套件,如x86增加64位支援就有了x86-64。廠商開發相容某種指令集的CPU需要指令集專利持有者授權,典型例子如Intel授權AMD,使後者可以開發相容x86指令集的CPU。

CPU的基本組成單元即為核心(core)。多個核心可以同時執行多件計算任務,前提是這些任務沒有先後順序。

核心的實現方式被稱為微架構(microarchitecture)。微架構的設計影響核心可以達到的最高頻率、核心在一定頻率下能執行的運算量、一定工藝水平下核心的能耗水平等等。此外,不同微架構執行各類程式的偏向也不同,例如90年代末期Intel的P6微架構就在浮點類程式上表現優異,但在整數類應用中不如同頻下的對手。

常見的代號如Haswell、Cortex-A15等都是微架構的稱號。注意微架構與指令集是兩個概念:指令集是CPU選擇的語言,而微架構是具體的實現。i7-4770的核心是Haswell微架構,這種微架構相容x86指令集。對於相容ARM指令集的晶片來說這兩個概念尤其容易混淆:ARM公司將自己研發的指令集叫做ARM指令集,同時它還研發具體的微架構如Cortex系列並對外授權。但是,一款CPU使用了ARM指令集不等於它就使用了ARM研發的微架構。Intel、高通、蘋果、Nvidia等廠商都自行開發了相容ARM指令集的微架構,同時還有許多廠商使用ARM開發的微架構來製造CPU。通常,業界認為只有具備獨立的微架構研發能力的企業才算具備了CPU研發能力,而是否使用自行研發的指令集無關緊要。微架構的研發也是IT產業技術含量最高的領域之一

數年前國產龍芯CPU獲得MIPS授權的訊息曾引起一陣風波,龍芯相關負責人還曾出來解釋。龍芯是相容MIPS指令集,微架構部由中科院自主研發的CPU系列。過去中科院資金不足所以沒有MIPS指令集授權,但是指令集的實現方式是公開的,因而中科院可以在研發時選擇相容該指令集。待資金充足買下授權後,龍芯就可以合法在市面銷售。從這裡我們可以知道,廠商研發CPU時並不需要獲得指令集授權就可以獲得指令集的相關資料與規範,指令集本身的技術含量並不是很高。獲得授權主要是為了避免法律問題。然而微架構的設計細節是各家廠商絕對保密的,而且由於其技術複雜,即便獲得相應文件也難以山寨。不同廠商的微架構設計水平也有較大差異,典型如Intel與AMD的對比,前者在最近幾年明顯技高一籌。

微架構研發完成,或者說核心研發完成,接下來就是將其組裝為晶片了。過去的晶片僅僅包括CPU部分,如今大量的晶片整合了CPU、GPU、IO等多種不同的功能元件,此時這種晶片就不是傳統意義上的“CPU”了。將各種功能元件組裝為晶片的技術含量相比微架構研發來說是較低的,因而業界能做此類工作的企業也數量較多。

在PC時代,幾大主要的CPU研發廠商都只是自己研製微架構自己用。到了智慧裝置時代,ARM公司的微架構授權模式興起。ARM自己開發微架構後將它們上架出售,其他廠商可以拿這些核心組裝為晶片來使用或銷售。由於這種模式對第三方的技術能力要求很低,加上ARM的微架構在低功耗領域表現優異,這種模式獲得了廣泛成功。如果你發現某款晶片標明使用了Cortex系列核心,則一定是這種模式的產物。如前所述,僅僅從ARM購買微架構來組裝晶片的廠商是不能被稱作CPU研發企業的,這些晶片也不能被稱為“xx廠商研發的CPU”。典型如華為的海思920、三星Exynos 5430,只能說是“使用ARM Cortex-A15核心的晶片”。但是如果一款相容ARM指令集的晶片使用了廠商自主研發的微架構情況就不同了。高通驍龍800、蘋果A7就是這樣的例子--它們分別使用了高通、蘋果自主研發的CPU。

隨著智慧裝置市場不斷擴大,ARM陣營也不斷壯大。佔領智慧裝置領域後,ARM陣營開始進入PC、伺服器與高效能運算領域。先是ARM釋出了ARM v8 64位指令集規範,接著是各大廠商紛紛開始研發基於ARM v8的高效能微架構。有人會問,ARM指令集不是為低功耗裝置研發的嗎?怎麼現在又開始做高效能CPU了呢?多年以前這樣的懷疑是很有道理的,因為彼時不同指令集對微架構的影響還比較大,ARM適合低功耗,x86適合PC,Power適合小型機……這類區分是存在的。但是隨著技術進步,指令集對微架構的影響已經小到可以忽略,任何指令集都可以做出適合不同領域的優秀微架構來。因此使用者看到x86指令集的手機cpu或是ARM指令集的伺服器CPU都無需驚訝,這是技術發展的自然結果。

那麼,現在各家CPU研發廠商選擇指令集的標準又是什麼呢?業界除了x86和ARM、MIPS,其實還有一大堆各種各樣的指令集。比如小型主機領域的Sparc、Alpha、Power等。國內幾家研CPU的科研機構就分別選擇了x86、MIPS、Sparc、Alpha、ARM指令集,早年甚至有機構選擇Intel沒落的Itanium使用的EPIC指令集的。一般來說大家傾向於選擇軟體生態較好的指令集--前面說過,軟體必須編譯後才能在某種指令集平臺上執行,而編譯是很複雜的事情,絕大多數閉源軟體僅僅會對少數一兩個平臺編譯。因而支援某種指令集的軟體應用越多,這種指令集也就越有市場優勢--新開發的微架構只需要相容某種指令集,那麼就可以很容易執行大量為其開發的軟體。早年因為微軟的強勢與Wintel聯盟的推動,x86指令整合了最受歡迎的角色,幫助Intel用彼時效能相對落後的微架構在PC平臺擠跑了一眾對手。後PC時代由於蘋果谷歌的兩大作業系統平臺的推動,ARM指令集又取得了絕對的市場優勢。但對於新的CPU研發單位來說,他們想獲得熱門指令集的相容授權是很困難的事情。以前x86與ARM的指令集授權是拿錢買不到的,想要得到都需要進行高水平專利交換。拿到x86授權的幾家廠商要麼是拿的早(AMD、Cyrix、IDT),要麼是有高水平技術與Intel交易(Transmeta,以功耗控制技術同Intel交易)。後來Nvidia想要研發自己的CPU,找Intel軟磨硬泡後者就是不給,搞得Nvidia相當無奈。國內的研發單位當年開始研究時自知不可能拿到x86授權,於是各自去找關係好些的其他授權方解決問題了。ARM這邊也一直對指令集授權卡的很死,之前只有高通、博通和Intel得到,也是通過技術交換的形式。08年蘋果喬幫主被Intel甩臉色後決定自己搞CPU,最後也拿到了ARM的許可,想來彼時老喬也是威逼利誘,硬是讓ARM屈服了(畢竟指令集多授權一家就多個對手啊)。後來ARM對指令集授權也放鬆了,去年三星與華為也分別得到了授權,他們的自研CPU預計也將在未來一兩年面世。

本文總結下來的內容很簡單:指令集與微架構是不同的概念,不可混淆;CPU研發指的是微架構研發;如今指令集不再有“最適合領域”的說法。希望這篇文章能幫助被這些問題困擾的朋友,也希望媒體在提及這些概念時多做一些科普與澄清。

相關文章