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