从LLVM说起,有关CPU架构,JIT等
文章目錄
- LLVM
- CPU架構
- PowerPC
- ARM
- X86
- MIPS
- 編譯執行和解釋執行
- JIT編譯
LLVM
LLVM(Low Level Virtual Machine,不過官方為了避免混淆已經棄用該名稱,將LLVM作為項目的全名),這是一個用 C++ 編寫的開源項目,最開始作為伊利諾伊州大學的一個研究項目由 Swift 語言的創始人 Chris Lattner 進行開發。LLVM項目是模塊化、可重用的編譯器以及工具鏈技術的集合。
LLVM提供了與編譯器相關的支持,可以作為多種語言編譯器的后端來使用,能夠進行程序語言的編譯期優化、鏈接優化、在線編譯優化、代碼生成。
LLVM從一個學術研究項目進化成C、C++和Objective C編譯器的通用后端。成功的關鍵是性能和適應能力,兩者都得益于LLVM獨特的設計和實現。
傳統的編譯器架構為:
Source Code -> [ Frontend & Optimizer & Backend ] -> Machine Code
對比,LLVM的架構為:
Source Code @ x -> [ x Frontend ] -> [ LLVM Optimizer @ IR ] -> [ LLVM m Backend ] -> Machine Code @ m
其中,x為C/C++, Objcect C等多種語言;m為x86,PowerPC,ARM等多種CPU架構。
關于架構和示例,更詳盡的說明參見:https://www.jianshu.com/p/1367dad95445
LLVM常見應用:
CPU架構
PowerPC
二十世紀九十年代,IBM(國際商用機器公司)、Apple(蘋果公司)和Motorola(摩托羅拉)公司開發PowerPC芯片成功,并制造出基于PowerPC的多處理器計算機。
后來,主流的PowerPC處理器制造商有IBM、Freescale? Semiconductor(原摩托羅拉半導體部)、AMCC、LSI等。其中以IBM和Freescale的PowerPC處理器最為流行。
目前,PowerPC已經走向沒落。
INTEL面對的是大眾市場,信奉“摩爾定律”,在競爭激烈的隔熱PC的市場,保持超強戰斗力。IBM面對專業市場,新一代出來后,做得好不好,銷量其實都差不多,技術人員向前發展的精神動力幾乎就沒有了。
由于 IBM PC 兼容機的逐步普及,技術上相對落后的英特爾反而占了更多的市場份額。在業務上,半導體只是摩托羅拉的一個部門,而微機處理器又只是其半導體部門的一項業務,可是它對于英特爾來講卻是全部。隨著蘋果也開始使用英特爾的處理器,摩托羅拉徹底推出了微機處理器市場:2005年,喬幫主在WWDC大會上正式宣布將在2年內將全部電腦產品轉向Intel平臺,2006年1月,搭載Intel Core Duo處理器的iMac和Macbook Pro就已經面世。
Android+ARM的陣營,使得一些公司做手機等終端的門檻大大的降低:小米、Oppo、華為這樣的廠商迅速崛起,也是得益于此。
網關、交換機、路由等等本應該是屬于大功耗RISC處理器的應用場景,PowerPC、MIPS原本牢牢占據這個領域,但是隨著多核ARM的強大,逐步也失去優勢。
ARM
ARM架構,過去稱作進階精簡指令集機器(Advanced RISC Machine,更早稱作:Acorn RISC Machine),是一個32位精簡指令集(RISC)處理器架構,其廣泛地使用在許多嵌入式系統設計。
ARM 公司本身并不靠自有的設計來制造或出售 CPU ,而是將處理器架構授權給有興趣的廠家。例如,生產廠商有:TI (德州儀器)/Samsung(三星)/Freescale(飛思卡爾)/Marvell(馬維爾)/Nvidia(英偉達)。
對于授權方來說,ARM 提供了 ARM 內核的整合硬件敘述,包含完整的軟件開發工具(編譯器、debugger、SDK),以及針對內含 ARM CPU 硅芯片的銷售權。
X86
x86架構是重要地可變指令長度的CISC(復雜指令集電腦,Complex Instruction Set Computer),是英代爾Intel首先開發制造的一種微處理器體系結構的泛稱。
架構底層有大量的硬件專利,x86架構做pc主板還有大量的外設和接口的專利,這么多年下來,形成了堅強的壁壘。第三方要想突破這樣的壁壘,還需要各種外設和操作系統來形成的新的標準和專利的話,基本不可能。
那么只有從intel或者AMD獲得x86架構的授權一條路,現在想獲得授權,這兩家都不會賣了,就算賣也是天價,加上研發成本的投入,成本就太高了,沒法正常運營。
現在Amd市場占有率現在也就是百分之十左右,在盈利和虧損之間徘徊,第三家介入的話,不會比AMD更好。
intel的強大還在于它是最先進的半導體生產工藝制造商,三星和臺積電都要排在后面。
威盛是除Intel、AMD之外,唯一一家擁有X86架構授權的公司,當然也是從intel授權來的,曾經有“臺灣英特爾”之稱,也曾于研發投入和人才各方面的原因,除了在低功耗等領域有領先的產品,后來也逐步退出了這個市場。
MIPS
MIPS是世界上很流行的一種RISC處理器。MIPS的意思是“無內部互鎖流水級的微處理器”(Microprocessor without interlocked piped stages),其機制是盡量利用軟件辦法避免流水線中的數據相關問題。
MIPS技術公司是美國著名的芯片設計公司,MIPS自己只進行CPU的設計,之后把設計方案授權給客戶,使得客戶能夠制造出高性能的CPU。
編譯執行和解釋執行
編譯過程是將源代碼轉換為機器碼的過程。
編譯執行:整體編譯完了,再開始執行。舉例:C/C++。
解釋執行:直接解釋源代碼,并且直接執行,沒有編譯過程。舉例:JavaScript,python。
無論是編譯執行還是解釋執行,都需要經過:源碼 -> 詞法分析 -> 單詞流 -> 語法分析 -> 抽象語法樹 的過程。
此后,
編譯執行會先將抽象語法樹經過優化器并產生優化后的中間代碼(可選),然后再生成目標代碼。
解釋執行會先將抽象語法樹轉換為指令流(可選),然后再通過解釋器進行解釋執行。
編譯器:把源程序的每一條語句都編譯成機器語言,并保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快。
解釋器:只在執行程序時,才一條一條把字節碼解釋成機器語言給計算機來執行。
Java的執行模式:
JIT編譯
動態編譯(dynamic compilation)指的是“在運行時進行編譯”;與之相對的是事前編譯(ahead-of-time compilation,簡稱AOT),也叫靜態編譯(static compilation)。
JIT編譯(just-in-time compilation)狹義來說是當某段代碼即將第一次被執行時進行編譯,因而叫“即時編譯”。JIT編譯是動態編譯的一種特例。JIT編譯一詞后來被泛化,時常與動態編譯等價。
sun公司在jdk8之后的JVM技術實現是HotSpot,這里還有一層關系,JDK是java開發環境,JRE是java運行環境,JDK包含JRE,而JRE包含JVM。也就是說HotSpot是JVM的實現技術,是用C+匯編語言編寫的,主要功能包括一個解釋器和兩個編譯器,這也是為什么jdk8之后的JAVA是編譯與解釋混合執行模式的原因。兩個編譯器可以成為JIT編譯器,即動態編譯器,是兩種模式,server模式和client模式。
JVM(特指Oracle JDK的HotSpot虛擬機)中的JIT特性:
總結
以上是生活随笔為你收集整理的从LLVM说起,有关CPU架构,JIT等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python+selenium 操作谷歌
- 下一篇: 1 EXECL的查找:(1)精确查找,(