- Julia機(jī)器學(xué)習(xí)核心編程:人人可用的高性能科學(xué)計(jì)算
- 朱紅慶
- 723字
- 2020-07-28 11:01:33
1.10 LLVM和JIT
LLVM本來是伊利諾伊大學(xué)的一個研究項(xiàng)目,其目的是創(chuàng)建基于靜態(tài)單一任務(wù)(SSA)的現(xiàn)代的、類型安全的編譯方法。它擁有底層操作,具有靈活性,并且具有可以清晰地表示所有高級語言的能力。它實(shí)際上是模塊化、可重用編譯器和工具鏈技術(shù)的集合。LLVM不用對傳統(tǒng)虛擬機(jī)做太多修改,下面列舉LLVM的一些特性。
? 創(chuàng)建LLVM的核心庫提供了現(xiàn)代的源和目標(biāo)的獨(dú)立優(yōu)化,并且支持許多流行CPU的代碼生成,這些庫是圍繞LLVM中間表示(LLVM IR)構(gòu)建的。
? Clang是一個LLVM原生的C/C++/Objective-C編譯器,旨在提供驚人的編譯速度(例如,在調(diào)試編譯Objective-C代碼時比GCC快3倍),可以提供非常有用的錯誤警告,并且為構(gòu)建優(yōu)秀的源代碼工具提供一個良好的平臺。
? DragonEgg將LLVM優(yōu)化器和代碼生成器與GCC解析器集成在一起,這使得LLVM支持編譯Ada、Fortran和GCC編譯器支持的其他語言,并訪問Clang不支持的C語言特性。
? LLDB項(xiàng)目以LLVM和Clang提供的庫為基礎(chǔ),提供了一個出色的本地調(diào)試器。它具有Clang AST和表達(dá)式解析器、LLVM JIT、LLVM反匯編器等諸多功能,因此提供了出色的使用體驗(yàn),并且在加載符號時相比GDB也要快得多,且內(nèi)存效率更高。
? SAFECode項(xiàng)目是針對C/C++程序內(nèi)存安全的編譯器。它通過運(yùn)行時檢查代碼,以便在第一時間檢測出內(nèi)存安全錯誤(例如,緩沖區(qū)溢出),保護(hù)軟件免于安全攻擊,也可以像Valgrind一樣用作內(nèi)存安全錯誤調(diào)試工具。
在計(jì)算中,Julia使用JIT編譯(也被稱為動態(tài)翻譯),編譯執(zhí)行在程序運(yùn)行時,而不是在程序運(yùn)行前。在大多數(shù)情況下,代碼需要被轉(zhuǎn)換為機(jī)器代碼,然后直接執(zhí)行,但也可以被轉(zhuǎn)換為另一種格式,JIT編譯器通常不斷地分析正在執(zhí)行的代碼,并且識別代碼的一部分,使得從編譯中獲得的性能加速超過編譯該代碼的性能開銷。另外,LLVM JIT編譯器可以在運(yùn)行時從程序中優(yōu)化掉不必要的靜態(tài)分支,此功能用于Mac OS X 10.5 Leopard的OpenGL管道,以支持所缺少的硬件功能。
- Java異步編程實(shí)戰(zhàn)
- Learn Scala Programming
- SQL Server 2012數(shù)據(jù)庫管理與開發(fā)項(xiàng)目教程
- C++ 從入門到項(xiàng)目實(shí)踐(超值版)
- Android程序設(shè)計(jì)基礎(chǔ)
- 快速入門與進(jìn)階:Creo 4·0全實(shí)例精講
- Cocos2d-x Game Development Blueprints
- C++從入門到精通(第6版)
- Getting Started with Python
- Learning iOS Security
- 零基礎(chǔ)學(xué)HTML+CSS
- 貫通Tomcat開發(fā)
- Secret Recipes of the Python Ninja
- Software Development on the SAP HANA Platform
- Puppet:Mastering Infrastructure Automation