ARM(RISC)和x86(CISC)的技術差異

hemeinvyiqiluoben發表於2018-01-24

轉自: https://www.cnblogs.com/bitter/p/4023176.html


RISC和CISC,這一對冤家,從誕生之日開始就處在不停的糾纏之中。直到今天,兩者經過多年的發展後,都在各自領域開啟了一片天地,並且相互滲透。RISC專注高效能、高效能功耗比、小體積以及移動裝置領域,CISC專注桌面、高效能和民用市場。現在,RISC的代表是ARM,而CISC的代表則是我們耳熟能詳的x86。那麼,他們的技術差異在哪裡?究竟是怎樣的技術分歧帶來了兩者如此大的差別呢?

ARM(RISC)和x86(CISC)的技術差異。

指令集的出現

要說清楚RISC和CISC,也就是今天熱門的ARM和x86之間的差異,還得把時間往前推一些,觀察計算機誕生之初的一些事情,才能很清楚地瞭解指令集、精簡和複雜之間的關係。

 

機器語言的例項  
機器語言 含義
0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1

 

今天學生學習計算機實在是太幸福了!今天有大量的視覺化的操作方式,有成熟的各種接近自然語言的程式語言,在這些語言中還有很多寫好的庫用於完成那些固定而複雜的任務。這種“幸福”的計算機的學習和使用過程,你完全不應該覺得困難——請注意,如果和上個世紀七十年代的計算機使用者比起來,真的好太多了。

老式的計算機,使用紙帶進行輸入輸出,效率極其低下。
老式的計算機,使用紙帶進行輸入輸出,效率極其低下。

上世紀70年代末期,計算機的出現雖然帶來了各種方便,但也帶來了各種不方便。首先就是程式設計。當時沒有類似今天這樣的高階的、接近自然語言的、各種邏輯都非常完善的程式語言,而是採用最底層的機器語言來寫命令。

機器語言和後來的組合語言,在使用中都顯得很麻煩,可讀性差,並且很難維護。此外,還有最重要的一點是,這些語言都比較“笨”,如果要計算一些稍微複雜的操作比如乘法、除法、三角函式、微積分、方程等,每次計算都需要重新編寫程式(在紙帶上打孔輸入資料的時代,是沒有“貼上+複製”的方便功能的)。

於是人們想了一個方法,對一些比較常用的指令,比如積分、微分、乘除法等,乾脆寫一套標準的程式,留下輸入資料的介面。這樣就能夠大幅度地降低程式設計中的難度,提高程式設計效率並增加其易用性。這個想法一提出,就得到了很多業內人士的認可,大家給這種想法取了一個名字,叫做“指令集”。

指令集中包含了大量的基礎運算的內容,並且以公式化和模組化的方式供人們使用。對軟體來說,指令集的出現無疑大幅度提高了程式編寫的效率。同時由於模組化指令的存在,軟體的執行效率也得到了提升。對硬體來說,專用模組的效率永遠高於通用模組,因此指令集的出現也為CPU硬體效能的提升開啟了一扇新的大門。

複雜的還是精簡的?

指令集誕生後,CPU廠商都開始整理、規範這些指令集,其中就包括英特爾。英特爾在它最為成功的一款處理器8086中,開始加入大量指令集,以提高計算效率、增強CPU效能。與此同時,另外一種思想在悄悄萌芽。

英特爾為了相容8086處理器,不得不一直採用x86 CISC指令集。
英特爾為了相容8086處理器,不得不一直採用x86 CISC指令集。

業界有一個著名的“8020定理”,可以應用在很多方面:比如一家公司80%的人都會是普通職員,20%的人才可能成為領導者;這些領導者每天做的事情80%是不緊急或者不重要的、20%才是最緊急最重要的內容等等。“8020定理”概括了社會發展的大部分內容,雖然不那麼精確,但足以說明大部分內容往往沒有什麼效率,最值得關心的往往是那20%的核心部分—比如下面這一段:

CPU的指令集是各種功能的集合。指令集誕生的原因是人們渴望在軟體編寫時更有效率,同時也符合事物發展中規範化、模組化的需求。但是,在所有指令集中,經過人們分析和統計,只有20%的指令集會在80%的場合都用到,而絕大部分80%的指令集只有20%的場合需要出現。

RISC處理器的效率很高,一般來說能耗比很出色,但是指令比較複雜,特別是程式體積較大。圖為IBM的Power 7處理器的介面,是經典的高效能RISC處理器。
RISC處理器的效率很高,一般來說能耗比很出色,但是指令比較複雜,特別是程式體積較大。圖為IBM的Power 7處理器的介面,是經典的高效能RISC處理器。

這裡的意思就很明確了。如果一個CPU支援所有的指令集,那麼其中20%的部分會被經常呼叫,而80%的部分經常閒置無所事事,至少在80%的時間中都是如此。在CPU電晶體“寸土寸金”的年代,這樣的做法是對電晶體的嚴重浪費。在這種情況下,曾任史丹佛大學校長、美國科學院、工程學院和文理學院三院院士的約翰·亨尼西教授和加州大學伯克利分校的計算機教授戴維·帕特森等人,就提出了一種更為簡單的指令集,叫做精簡指令集,全稱是Reduced Instruction Set Computing,簡寫為RISC。而傳統的大而全的指令集也被賦予了一個正式的名字,叫做Complex Instruction Set Computing,也就是CISC。

RISC的優勢在於將指令數目和定址方式都做出了改進,大幅度降低了設計難度,編譯器的效率更高並且指令的並行執行程度更高。同時RISC製造的CPU體積更小、能耗更低、效能功耗比更高。但是RISC並不是沒有缺點,比如RISC的CPU對20%的常用指令集的計算效率更高,而對一些不常用或者複雜的指令,則以幾個常用指令組合的方式來完成,計算效率就明顯下降。對軟體來說,RISC的程式體積相對CISC會大一些,複雜度稍高。並且由於指令集精簡,早期的RISC處理器的效能顯然不如同期的CISC,雖然它更小、功耗更低。

今天的CPU:x86和ARM

雖然從原理來看,RISC和CISC可謂井水不犯河水。但RISC和CISC在發展過程中,彼此反而取長補短,各有所得。

對CISC來說,指令集本身隨著計算要求不斷髮展,肯定會越來越多。CISC繼續發展下去,其實際CPU產品的電晶體數量會難以抑制地上升,效能功耗比和成本表現很難讓人滿意。從設計角度來看,CISC指令集長度不固定、執行時間也不固定、設計困難很多,很難找出一條高效率的通用設計道路來完成指令的執行。此外,由於CISC處理器和儲存器之間的速度差距,快取變得越來越重要。這也意味著CPU本身需要更為精簡高效,節省的空間需要用於容納越來越重要的各級快取。

為了解決這些問題,現代的CISC處理器開始認真學習RISC的思想。CISC的問題在於指令集複雜多變,為每一個指令制定專門的硬體優化顯然不可能。那麼,可不可以換一個思路呢?將那些最常使用的指令集挑選出來,然後為其進行專門優化,就可以大大提高效率;至於不常用的指令,則可以用幾個基礎指令組合的方式完成——這正是RISC的思想。有所不同的是,RISC讓思想完成在指令層面,而CISC將這個思想實現在硬體層面。

英特爾的Nehalem處理器可謂借鑑RISC思想而設計的x86。
英特爾的Nehalem處理器可謂借鑑RISC思想而設計的x86。

以英特爾的Nehalem或者AMD的K10處理器為例。首先,這些x86處理器內部都會使用“微指令”。所謂微指令,就是一些基礎的指令,CISC指令中大部分都可以被拆分為幾條簡單而固定的微指令。其次,CPU內部設計了“翻譯單元”,一般是由解碼單元來執行的。在執行中,CPU接受一條x86指令,然後解碼單元將接收到的比較複雜的X86指令拆解為一個或幾個微指令。比如Nehalem設計了3個簡單的解碼單元和1個複雜的解碼單元,可以將x86指令解碼拆分、“翻譯”為1~4條微指令。

第三,CPU內部針對這些微指令會做出充足的優化,讓其執行效率和速度都達到令人滿意的程度。當然,在解碼處理的過程中,不是所有的x86指令都會得到平均對待。那些最常用的指令比如mov、push、call、cmp、add等會被重點、優先、加速處理,不常用的指令要麼被拆分為常用指令,要麼進入普通迴圈進行處理。效率雖然有影響,但考慮到其使用機率很低,因此這樣的設計完全可以接受。在微指令解碼和處理過程中,如何更有效率、更為高效地執行x86命令;微指令應該如何表達、執行;微指令和x86指令的關係以及哪些微指令是最常用、最優先的指令,成為最影響CPU效能的核心內容。

未來的ARM Cortex A-50是高效能處理器的代表產品
未來的ARM Cortex A-50是高效能處理器的代表產品。

在採用了RISC思想、對x86處理器的設計進行革新後,如今的CISC處理器基本上可以解決CISC指令複雜、體積龐大,電晶體耗費多等問題。對廠商來說,一個設計優秀的x86處理器的解碼和流水線核心可以維持數代發展而不落伍。廠商可以在發展過程中不斷對已經設計好的核心進行調整和調配,在快取、匯流排配置上進行更改以獲取更好的效能。

CISC借鑑RISC的思想,讓自己獲得了新生。相對來說,RISC對CISC也有借鑑,但不算太多。RISC指令簡單並且相對固定,處理快速,在設計上甚至可以使用更長的流水線來達到高頻率,並最終獲得更優秀的效能。但RISC的主要問題在於指令集簡單,因此在處理一些比較複雜的應用時,儲存器需要讀入的指令總數耗費時間更多,部分場合下效能表現不理想也是RISC的硬傷。因此,在RISC的發展中,RISC也在逐漸注入CISC的思想。比如緊跟時代加入一些新的指令集,更進一步優化內部架構,執行週期變成不固定週期等。RISC發展到現在,指令也逐漸增多,浮點計算等重要效能也日益強大。以ARM為例,不但逐漸增強浮點計算效能、新增專門的浮點指令,還計劃在現有的基礎上開展高效能ARM處理器的發展,以增強未來應對市場變化特別是對x86處理器競爭的能力。

未來的處理器,功耗更低,效能更高

從目前CPU的發展來看,無論是ARM還是x86,無論是CISC還是RISC,除了努力鞏固自己的效能優勢,加強產品的效能外,還積極吸取對方產品的特色,取長補短,期望有所突破。不過無論如何,未來的CPU肯定在朝著高效能、低功耗的方向發展。目前移動計算大潮已經來臨,競爭日趨激烈。但說到底就是效能功耗比的競爭,誰能在低功耗下提供高效能,誰就有希望獲得成功。未來的處理器,功耗將更低,效能會更高。

 

 

===================================

轉自 http://www.mcplive.cn/index.php/article/index/id/12476


相關文章