你對過去知道的越多,對未來就看的越遠

1 引言

手機提供給了我們多樣化生活,它讓我們隨時隨地和世界保持連接,就象呼吸空氣一樣平常。我們每天起來第一件事就是打開手機,晚上睡前最後一件事是放下手機。幾分鐘不點開微信,新聞,遊戲,就如同自己被世界遺忘了,或自己遺忘了世界,我們無時無刻不在刷手機,公交地鐵裏、上班開會時、喫飯閑聊中……如果我們不得不離開一段時間,那回來之後第一件事就是急不可耐的看看手機有沒有新的消息。

看似我們和手機親密無間,但是我們真正瞭解它嗎?或者說真正瞭解帶給我們這一切多樣化生活的幕後英雄嗎?說到這個幕後英雄,大家應該都不陌生-處理器。無論手機廠商發布哪一款手機,我們第一時間都會去扒一扒它的內芯SoC,而說起手機晶元廠商,相信大家第一時間會想起高通、三星、聯發科、海思以及當前紅極一時的松果等,而無論是哪一家都要受益於頂級幕後推手-ARM公司,因為他們的手機晶元均是基於ARM的指令集,採用ARM的公版內核架構,亦或者是基於ARM的指令集自研架構。

作為混跡於IT行業的碼農們,我想大家肯定都或多或少的知道arm處理器,然而你對ISA指令集,處理器微架構、ARM處理器的家族分類瞭解嗎?我想絕大多數的碼農肯定是一臉懵逼的。

今天瓶子哥就帶大家通過講解ARM以及相關的技術背景點來揭開這些知識謎底,話說以後出去裝X就靠它了!否則當外行們問起關於ARM處理器的相關技術點而無法從容應答的時候,我等屌絲該如何面對碼農這等高大上的職業呢?

就像多年前朋友讓瓶子哥幫忙攢一臺能打LOL的臺式機電腦的時候,當時我竟無言以對,然後匆忙從網上到處去現扒相關的配置資料。雖然我很想說哥雖然是學計算機的,但是攢機真的是另外一門學問好不好,箇中滋味我想大家應該能理解。

而對於我們職場的碼農君們來說,深層次的瞭解ARM無疑對嵌入式開發有很大的裨益,比如在立項的時候針對不同的產品形態,我們可以更快,更好的進行晶元選型,做到物盡其用。

好了,說了這麼多,終於引出我們今天課堂上要討論的話題:讓我們一起來扒一扒ARM處理器的前世今生。今天的課主要是講講ARM處理器的發展以及處理器相關的概念知識點。不會有過多的技術性論證,所以大家可以輕鬆活躍些。「狗蛋,雖然老師說了這節課不會涉及太多的技術論證,但是並不代表你們某些同學就可以打醬油哈,要知道老師的每節課都是為後面的知識做鋪墊的,要想跟著老師一起飛,一定要凝神定氣,打起十二分精神,OK,Everybody坐好了,我們要飛了!」

2 今生ARM的大動作

2016年,日本軟銀同意斥資243億英鎊(約合人民幣2155億元))收購英國晶元設計公司ARM,這則消息再一次把這家低調而不失內涵的世界性的科技公司推向了公眾面前。ARM被譽為英國的蘋果,最成功的科技公司,一個敢和英特爾拍桌子的競爭對手,和互聯網浪潮中默默無聞的英國一樣,低調到很少有人聽說過這個名字,但這並不影響他「統治全球」的節奏:2017年宣佈正式達成1000億晶元出貨量的里程碑。

全世界95%的智能手機和80%的數碼相機都在使用ARM技術。在一些新興領域,如頭戴顯示器、自動駕駛汽車、智能手錶以及無人機中也不會缺少這家技術公司的身影,它是全球消費品電子產品的絕對幕後推手。作為整個智能移動硬體行業的絕對上游,ARM憑藉超過90%的市場份額幾乎掌握了決定行業下一步走向的能力。而在軟銀的領導下,ARM又將在智能硬體領域掀起一場怎樣的血雨腥風呢?

3 ARM的前世

1978年12月5日,物理學家赫爾曼·豪澤(Hermann Hauser)和工程師Chris Curry,在英國劍橋創辦了CPU公司(Cambridge Processing Unit),主要業務是為當地市場供應電子設備。

1979年,CPU公司改名為Acorn RISC Machine計算機公司。Acorn公司打算使用摩托羅拉公司的16位晶元,但是發現這種晶元太慢也太貴。"一臺售價500英鎊的機器,不可能使用價格100英鎊的CPU!"他們轉而向Intel公司索要80286晶元的設計資料,但是遭到拒絕,於是被迫只能趕鴨子上架自己研發,不知道現在的Intel會不會為當時的決定而後悔呢。

ARM公司前身Acorn

1985年,RogerWilson和SteveFurber設計了他們自己的第一代32位、6MHz的處理器,RogerWilson和SteveFurber用它做出了一臺RISC指令集的計算機,簡稱ARM(Acorn RISC Machine)。這就是ARM這個名字的由來。

RISC的全稱是"精簡指令集計算機"(reduced instructionset computer),它支持的指令比較簡單,所以功耗小、價格便宜,特別合適移動設備。由於Acorn晶元符合低功耗的特性,蘋果當時正在開發新的PDA設備「Newton」就直接選用了Acorn的晶元。Acorn為蘋果公司後來設計出成功的產品iPhone打下了良好的基礎。

1990年11月,Acorn、Apple和VLSI共同出資創建了ARM。Acorn RISC Machine正式更名為Advanced RISC Machine。被人稱作「英國的蘋果電腦公司」。由於缺錢,ARM公司的第一個辦公室不得不設在劍橋鄉下的一座改建過的18世紀的穀倉中,公司的辦公地點非常簡陋,就是一個穀倉。

公司成立初期缺乏資金,業績是寸步難行,鑒於此種情況,ARM做了一個影響時代的決定:ARM不製造晶元,只將晶元的設計方案(IP)授權給半導體合作夥伴(高通、蘋果、MTK及三星等),後者使用ARM的架構、設計以及開發工具推出自己的處理器,然後再供應給OEM客戶(各種手機、平板廠商),各晶元公司再根據自己的需求進行一些改進。從此,ARM 的公司在商業上開啟了設計授權之路,殊不知此決定在十幾年後改變了智能手機晶元市場,也正是藉由此模式的開展,使得ARM晶元業務遍地開花,甚至連PC領域的老大英特爾也不由感嘆。

1993年,Cirrus Logic和德州儀器公司先後加入ARM陣營。當年ARM7問世。

1997年,ARM里程碑產品ARM9發布,標誌著ARM正式進入微處理器領域。

1998年4月17日,ARM在英國倫敦證交所和美國納斯達克上市。

2004年,Cortex系列處理器誕生,從此不再用數字為處理器命名。它分為A、R和M三類,面向不同的市場。

2008年,ARM晶元的出貨量正式突破100億片。

2010年6月,蘋果表示有意以80億美元的價格收購ARM,但遭到拒絕。ARM公司CEO Warren East稱「ARM公司作為獨立公司更具價值」。

2011年,ARM推出了旗下首款64位架構ARMv8,還推出了big.LITTLE技術,高性能核心與節能核心相結合。

2013年12月13日,ARM收購著名光引擎技術公司Geomerics,擴大在圖形技術行業的領先地位。

2015年,ARM基於ARMv8架構推出面向企業級市場的新平臺標準,此外還開始在物聯網領域發力。同年,福布斯雜誌將ARM評為世界上五大最具創新力的公司之一。

2016年,日本軟銀同意斥資243億英鎊收購ARM。

2017年3月,ARM發布了針對人工智慧以及機器學習進行優化的DynamIQ技術作為下一代ARM Cortex-A系列處理器的基礎,正式發力AI領域。

ARM的生態鏈夥伴

4 機器指令

我們看看為什麼基於 x86 linux OS下的軟體不能直接運行在Android ARM 平臺設備上?

我們都知道計算機只能識別0/1這樣的二進位機器語言。所以最早的計算機程序都是用機器語言來寫的,那個時候的碼農真的才叫大神,他們需要去記憶大量的機器指令碼,瓶子哥稱之為編程的石器時代 ,後來巨人們發明瞭高級語言,於是乎鳥槍換炮,這才真正的解放了我等碼農,現在想想我們能夠在明亮的辦公司裡面對著電腦敲hello world是一件多麼美好的事情呀!為了緬懷下巨人們的卓越貢獻,我們用我們碼農的方式再表達下敬意:

碼農們都知道我們寫的高級語言需要通過編譯工具執行一系列的處理最終才能生成機器識別的二進位文件。所以我們的hello.c需要經過預編譯,編譯,鏈接後,最終才生成機器識別的二進位。

在執行程序的時候,需要CPU將這些指令碼根據它們之前定義好的規則翻譯成機器能夠識別的語句(解碼),這樣最終CPU纔能夠按照我們的代碼思想為我們服務。

但是類似X86和ARM平臺它們所定義的規則肯定是不同的,所以相同的代碼經過不同平臺的編譯鏈工具交叉編譯處理後會生成特定平臺的二進位碼,雖然都是二進位語言,但是它們的解釋方法不一樣,二者的交流語言規則不同,所以定然無法溝通。

圖:Hello.c ARM彙編指令和X86彙編指令對比

從上圖可以看出ARM的語言規則和X86的語言規則完全是不一樣的,簡直無法溝通啊。

5 指令集

2009年6月17日,老牌處理器架構廠商美普思(MIPS)宣稱,龍芯所屬的中科院計算技術研究所獲得MIPS32、MIPS64的架構授權,雙方開展長期戰略性合作。這個消息翻譯下就是:龍芯採用了MIPS的指令集。

龍芯作為我國自主研發的處理器。都希望它能夠全部自主創新不被外界牽制,然而它還是不得不採用現存的指令集,為什麼呢?歸根到底是指令集的威力太大。用寫文章來打個比喻,你用自己造的文字寫一篇文章,人家認識嗎?創造全新的指令集技術上並不難實現,難的是會不會有人支持你。使用新的指令集意味著與之配套的編譯器、操作系統、應用軟體全部都要重新編寫。這個工作量無疑是巨大的。指令集的強大不在於它所屬的公司,而在於它的背後有一個強大的生態鏈,如晶元、軟體、工具等等。

那麼什麼是指令集呢?

ISA(指令集體系結構):一款處理器所支持的指令以及指令的位元組級編碼方式成為該處理器的指令集體系結構。如X86,ARM指令集,它是處理器的設計規範,定義處理器能夠做什麼,是處理器的抽象描述。從我們程序猿的角度看,ISA就是一些指令集以及寄存器的描述。 ARM指令集是基於精簡指令集計算機(RISC)設計的。

圖:ARMv8 A64 LDR指令描述

6 ARM的家族

到目前為止,ARM 共 8 種ISA 版本,也就是 ARMv1 ~ ARMv8。其中 ARMv1 和 ARMv2 地址範圍只到 26 bits,自 ARMv3 開始則採用了 32 bits 地址範圍,這種 32bit CPU 架構一直延續到ARMv7,從ARMv8 開始,CPU 架構則更改為64bit。

圖:架構版本及對應實現的處理器

對比看下我的三星s6手機CPU的信息看能看到哪些信息呢?

ARM9之前的版本採用的是馮諾依曼結構(von Neumann architecture)。而從ARM9以後都使用的是哈佛架構(Harvard architecture)。

馮諾依曼結構:是一種將程序指令存儲器和數據存儲器合併在一起的存儲結構。取指令和取操作數都在同一匯流排上,通過分時復用的方式進行。缺點是在高速運行時,不能達到同時取指令和取操作數,從而形成了傳輸過程的瓶頸。

馮諾依曼結構

哈佛結構:是一種將程序指令存儲和數據存儲分開的存儲器結構。它的主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問,目的是為了減輕程序運行時的訪存瓶頸

中央處理器首先到程序指令儲存器中讀取程序指令內容,解碼後得到數據地址,再到相應的數據儲存器中讀取數據,並進行下一步的操作(通常是執行),執行時可以預先讀取下一條指令。達到數據和指令的存取可以同時進行,同時可以使指令和數據有不同的數據寬度。

自ARMv7起處理器命令以Cortex開頭:

Cortex-A—高性能,面向性能密集型系統的應用處理器內核。

Cortex-R—快速響應,面向實時應用的高性能內核。

Cortex-M—小型、低功耗,面向各類嵌入式應用的微控制器內核。

最新的ARM Cortex-X系列見如下:

ARM 根據不同的狀況增加了許多種 ISA 的擴充,比如在 Java 很火紅的年代,為了提升 JVM 執行的效率,而引入了 Jazelle 指令集 ,用來協助增強 Java bytecode 運算的速度/佔用空間 (不過由於 Android 的 dalvik 並未將 Java 程序轉換成 bytecode 的形式,因此在 Android 平臺上 Jazelle 指令集並未有任何顯著的效能提升)。

各個不同的 ARM 版本對應的擴充指令集架構信息如下:

ARMv8-A 將 64 位架構支持引入 ARM 架構中,其中包括:

  • 64 位通用寄存器、SP(堆棧指針)和 PC(程序計數器)
  • 64 位數據處理和擴展的虛擬定址
  • 兩種主要執行狀態:
  • AArch64 - 64 位執行狀態,包括該狀態的異常模型、內存模型、程序員模型和指令集支持
  • AArch32 — 32 位執行狀態,包括該狀態的異常模型、內存模型、程序員模型和指令集支持

這些執行狀態支持三個主要指令集:

A32(或 ARM):32 位固定長度指令集,通過不同架構變體增強部分32位架構執行環境現在稱為AArch32。

T32 :(Thumb) 是以16 位固定長度指令集的形式引入的,隨後在引入Thumb-2 技術時增強為 16 位和 32 位混合長度指令集。部分 32 位架構執行環境現在稱為AArch32。

A64:提供與 ARM 和 Thumb 指令集類似功能的 32 位固定長度指令集。隨 ARMv8-A 一起引入,它是一種 AArch64 指令集。

7 處理器架構

17年3月22日,高通公司以「強者·愈強」為主題,在北京舉辦驍龍835亞洲首秀。作為業界第一款商用10納米FinFET製程的移動平臺,驍龍835擁有更為強大的性能與能效,而前不久小米推出了米6,也成為了國內首發驍龍835的手機廠商。這也預示著2017年,新一輪的智能手機大戰正在徐徐拉開,而作為基礎平臺的應用處理器,開始進入了10nm的軍備競賽,處理器面臨新一輪的激戰。

目前市場流傳有5顆10nm移動處理器,分別是驍龍835、Helio X30、麒麟970、蘋果A10X和三星Exynos 8895。

高通:驍龍835採用了Kryo 280 8核架構,4大核最高主頻2.45GHz,4小核最高頻1.9GH。

聯發科:Helio X30使用三叢十核結構,包括兩個Cortex-A73 2.8GHz強力核心,四個Cortex-A53 2.3GHz大核心,四個Cortex-A35 2.0GHz小核心。是全球首款三架構混合big.LITTLE架構三叢集十核心處理器。

華為:麒麟970 CPU由8個核心組成,分別是4核ARM Cortex-A73和4核ARM Cortex-A53,最高主頻為2.8GHz。

三星:Exynos8895,採用最新的自研4核貓鼬M2架構+4核高效能A53核心CPU。

那麼這場軍備競賽到底誰能笑傲江湖呢?

圖:10nm 處理器霸主之爭

早期在多核時代來臨的時期,大家都卯足勁了的拼核,4核、8核,MTK甚至搞出了10核。然而手機多核處理器本身就和電腦處理器有著巨大的差別,它面臨著巨大的功耗壓力,因此手機處理器需要綜合考慮。並不是核越多,性能就越強。如今手機圈裡流傳著這樣一個笑話:一核有難九核圍觀,就是指的MTK上代的旗艦機處理器X20,X20很容易發熱,一發熱就玩鎖核降頻來降溫,所以才會有網友這樣調侃。

而同樣基於10nm工藝的高通835,MTK X30,三星8895,華為970,4者性能又會是誰勝出呢?

我們直接拿網上的一個針對三星S8手機的評測數據來看下,Galaxy S8搭載了兩種版本的SoC:一個是三星Exynos 8895,另一個則是高通驍龍835。從跑分來看,單核成績Exynos 8895為1978, 驍龍835為1916,兩者差距不是很大。而多核成績,三星6375 VS 驍龍6011,兩者之間的差距就有些大了。這可以印證三星Exynos 8895性能上要強於高通驍龍835,而可以預見的是8895和835將會弔打MTK X30。為什麼基於同樣的10nm工藝,不同廠商的8核之間的性能差異會比較大,而10核更是會輸給8核呢?根本原因就在於它們處理器的架構不同。也可以簡單的理解為處理器的工作方式。這是不同等級的處理器最重要的劃分。

那麼何為架構,它和ARM又是怎樣的關係呢?

CPU架構是CPU廠商給屬於同一系列的CPU產品定的一個規範,主要目的是為了區分不同類型CPU的重要標示。目前市面上的CPU分類主要分有兩大陣營,一個是intel、AMD為首的複雜指令集CPU,另一個是以IBM、ARM為首的精簡指令集CPU。兩個不同品牌的CPU,其產品的架構也不相同,例如,Intel、AMD的CPU是X86架構的,而IBM公司的CPU是PowerPC架構,ARM公司是ARM架構。你可以這樣理解:處理器微架構相當於建築物的設計圖,指令集相當於建築材料。建築材料有錢都好買,但是盧浮宮只有貝聿銘能做出那麼棒的設計。

8 公版vs自主架構

ARM牛逼的地方就在於它不僅有指令集,還設計處理器架構,比如Cortex-A53/A73,像三星、MTK、英偉達、海思這些廠商拿到這些架構授權後,只需要選擇核心數、匯流排互聯、緩存等就基本完成CPU部分的設計。我們把這種直接使用ARM設計好的內核方案叫做公版架構。如高通驍龍810,MTK,三星exynos7420,海思等。

但是面對日新月異的行業應用需求,一些有能力的晶元廠商不甘於平庸,或者有特殊要求,為了形成差異化的競爭,就拿ARM提供的指令集架構如ARMv7/ARMv8,去研發自己的內核架構,之後再完成整個CPU的搭建,開啟了自主設計處理器架構的道路。

目前業界能夠自己設計處理架構的也就 蘋果、高通、三星。其他如MTK、海思、英偉達以及最新的松果都還是直接採用的ARM的公版IP核,如Cortex-A73,Cortex-A53等。所以ARM的授權方式也就分為指令集授權和IP核授權。

高通Kyro架構

Kryo是Qualcomm推出的首款ARMv8指令集定製設計的64位CPU,是廣受歡迎的定製基於ARMv7指令集Krait CPU的延續—Krait CPU支持驍龍 800、801和 805處理器。

蘋果Swift &Cyclone&Typhoon架構

到了iPhone5的A6開始,蘋果就自己設計了Swift架構,採用ARMv7-A指令集,到了A7首次使用64位的ARMv8指令集的Cyclone內核架構。僅僅雙核的配置性能就等同於四核的A15處理器。在到iPhone 6配備的A8晶元時,改進 的Typhoon架構單核性能超A57,多核只稍微落後八核A57+A53的驍龍810。可見架構的不同影響是多麼大。

三星貓鼬M1 & M2架構

對一直注重研發的三星而言,肯定是不甘心只看著別人玩自主架構風生水起的,所以配備在三星S7上的Exynos 8890,就採用了基於ARMv8指令集自研的Mongoose內核取代了A57,性能同樣強於A72,和高通kryo不相上下,而Exynos8895採用三星自主研發的第二代「貓鼬」架構。

當然,不管自主還是公版稱王稱霸,而作為消費者,只要能夠提供給我們很好的性價比產品就行了,實在沒必要去錙銖必較那多幾百的跑分。

9 落幕

好了,通過這堂課我想碼農朋友們終於弄懂了ARM的前世今生,以及什麼是ISA指令集,什麼是CPU內核架構,以及移動處理器晶元廠商的爭霸格局,在也不用為幫女友選個合適的手機而發愁啦,另外作為IT民工,談到智能手機相關話題也不用擔心做旁聽者了。最後,ARM既然都在不斷的引領著科技的發展,我等碼農屌絲自然也不能再技術的學習上落後啊。

歡迎關注公眾號「程序員觀世界」,查看更多精彩文章。


推薦閱讀:
相關文章