ARM(RISC)和x86(CISC)的技術差異
轉自: https://www.cnblogs.com/bitter/p/4023176.html
RISC和CISC,這一對冤家,從誕生之日開始就處在不停的糾纏之中。直到今天,兩者經過多年的發展後,都在各自領域開啟了一片天地,並且相互滲透。RISC專注高效能、高效能功耗比、小體積以及移動裝置領域,CISC專注桌面、高效能和民用市場。現在,RISC的代表是ARM,而CISC的代表則是我們耳熟能詳的x86。那麼,他們的技術差異在哪裡?究竟是怎樣的技術分歧帶來了兩者如此大的差別呢?
指令集的出現
要說清楚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指令集。
業界有一個著名的“8020定理”,可以應用在很多方面:比如一家公司80%的人都會是普通職員,20%的人才可能成為領導者;這些領導者每天做的事情80%是不緊急或者不重要的、20%才是最緊急最重要的內容等等。“8020定理”概括了社會發展的大部分內容,雖然不那麼精確,但足以說明大部分內容往往沒有什麼效率,最值得關心的往往是那20%的核心部分—比如下面這一段:
CPU的指令集是各種功能的集合。指令集誕生的原因是人們渴望在軟體編寫時更有效率,同時也符合事物發展中規範化、模組化的需求。但是,在所有指令集中,經過人們分析和統計,只有20%的指令集會在80%的場合都用到,而絕大部分80%的指令集只有20%的場合需要出現。
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或者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是高效能處理器的代表產品。
在採用了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
相關文章
- CISC和RISC的區別
- CISC和RISC是什麼?它們的特點和區別?
- (計算機組成原理)RISC與CISC的區別計算機
- Spark和Hadoop之間的主要技術差異和選擇SparkHadoop
- ARM和X86架構架構
- 以下關於CISC和RISC的敘述中,錯誤的是()【最全!最詳細總結!】
- 技術分享|SQL和 NoSQL資料庫之間的差異:MySQL(VS)MongoDB資料庫MySqlMongoDB
- CISC(複雜指令集)與RISC(精簡指令集)的區別
- UDP和TCP的差異UDPTCP
- vue和react的差異VueReact
- 對於 JavaScript 中迴圈之間的技術差異概述JavaScript
- ERP差異來源和差異處理
- Oracle中exists和in的效能差異Oracle
- ARM與X86架構的對決架構
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- GPRS與4G網路的技術差異與應用選擇
- ARM技術 —— 條件執行
- 好技術領導,差技術領導
- 好技術領導 差技術領導
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(五)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(三)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(一)筆記SQLOracle函式
- Bootstrap和Tailwind CSS之間的差異?bootAICSS
- Java和C++的基本差異(轉)JavaC++
- GPRS與4G網路:技術差異與應用選擇
- 好的技術團隊和差的技術團隊的區別在於技術架構前瞻性和適應變化的能力架構
- X86架構與ARM架構的區別:架構
- 工作流和BPM之間的差異
- 談談 mysql和oracle的使用感受 -- 差異MySqlOracle
- 聊聊t-io和netty的差異Netty
- mac和windows執行maven命令的差異MacWindowsMaven
- 空字串和空格字串在informix和oralce 的差異字串ORM
- 技術管理進階——一線Leader與大Leader的差異是什麼?
- 微軟平板 重燃ARM、x86戰火微軟
- 有感而發 - 日新月異的SAP開發技術和手術方式
- [譯]React函式元件和類元件的差異React函式元件
- Linux和Windows的差異?0基礎需知!LinuxWindows
- linux 下的差異和增量備份(轉)Linux