我不知道它是否提供這個問題的正確位置。但爲什麼蘋果選擇使用llvm
及其clang
實現來編寫OpenCL/OpenGL?它給他們帶來了什麼好處,以及如何?請原諒我對這個話題的無知,我對此並不瞭解。爲什麼蘋果在他們的OpenGL/OpenCL實現中使用CLang
回答
因爲它們有助於開發鏘/ LLVM,並因爲LLVM/Clang的編譯源代碼產生比GCC更快的二進制...
鏘的開發商聲稱,它提供了降低內存佔用和 增加編譯與競爭編譯器相比速度更快,例如GCC的 。爲支持他們的說法,他們表示,截至2007年10月,Clang編譯的碳文庫的編譯速度比GCC快兩倍,而使用約六分之一的GCC內存和磁盤空間的文件爲 。
Straight from an LLVM/Apple Developer
LLVM兩種不同的方式被使用,在運行時:
運行時代碼專業化固定功能內的頂點處理 管道。基本上,OpenGL管道有很多參數(霧 啓用?頂點具有紋理信息?等),這很少改變:執行完全分支代碼執行分支預測器和 表現不佳。爲了解決這個問題,代碼被預編譯爲LLVM.bc 表單,從中可以對代碼的特化進行優化,並根據運行時需要進行編譯。
OpenGL頂點着色器是使用 具有高度特定領域特徵的編程語言(例如點 產品,紋理查找等)編寫的小程序。在運行時,OpenGL堆棧將頂點程序轉換爲LLVM形式,運行LLVM優化器通過,然後JIT 編譯代碼。
(在上面的鏈路更多細節)
蘋果創建鏘如更換,以用於GCC C/C++/ObjC和ObjC++下降。 LLVM的創建者在其編譯器部門的Apple內部工作。在與伊利諾斯大學合作的項目中,蘋果已經爲GCC,GDB [見LLDB],libstdC++ [見libC++]和幾個新項目創建了完整的替代項目。
GPLv3是結束蘋果公司對海灣合作委員會貢獻的最後一根稻草,這也是蘋果在GCC 4.2.x上結束它的原因。
LLVM/Clang正在迅速取代整個行業的GCC。
LLVM現在是一個稱號不當。在LLVM/Clang的支持
當前的目標硬件:
- 靶臂 - 瞄準CppBackend - 瞄準六角 - 瞄準的Mips - 瞄準MBlaze - 瞄準MSP430 - 定位NVPTX - 瞄準的PowerPC - 瞄準的Sparc - 瞄準X86 - 瞄準XCore - 鏘版本:3.3
不久就添加了現成的AMD R600代碼庫。
Clang符合C99。 OpenCL使用C99的子集。 Clang是免費提供的最完整的C11兼容編譯器套件。
FreeBSD已經轉移到LLVM/Clang作爲即將發佈的10.0發行版的默認設置。
AMD和Nvidia使用LLVM/Clang構建OpenCL堆棧。
英特爾正在將他們的OpenCL和更多LLVM/Clang。
谷歌都在LLVM/Clang。同上Adobe,Sony,IBM,Cray等。
GCC是一個混亂的架構。 LLVM/Clang的模塊化使得它的改進速度和開發人員的選擇更大的上限。
LLVM/Clang 3.2的開發人員和用戶指南現在非常穩固,3.3中繼增加了大量文檔以瞭解LLVM/Clang的優勢。
高質量編譯器代碼的開發速度是首屈一指的。
- 1. 蘋果對文件的驗證......他們在問什麼?
- 2. 爲什麼人們如何實現他們自己的malloc?
- 3. 爲什麼蘋果使用.plist文件?
- 4. 爲什麼蘋果有heightForRowForIndexPath?
- 5. 他們爲什麼稱他們爲Thunk?
- 6. 爲什麼Java隱藏他們的getLocalHostName()實現?
- 7. 爲什麼他們一直呈現
- 8. 爲什麼我們在這裏使用接口實現?
- 9. 什麼是Node.js分離?他們爲什麼現在死了?
- 10. 他們爲什麼使用DBMS_STATS.GATHER_TABLE_STATS?
- 11. 爲什麼我們要實現接口?
- 12. 爲什麼在下面的代碼中出現clang錯誤?
- 13. 什麼是堆棧用於?他們爲什麼使用C++?
- 14. frama-clang的實現
- 15. 他們是如何在http://artofflightmovie.com/中實現這些效果的?
- 16. 實例變量是什麼?他們爲什麼如此重要?
- 17. 爲什麼他們在JavaScript中使用名稱空間?
- 18. 蘋果爲什麼不增加?
- 19. 什麼是armeabi以及他們爲什麼使用它
- 20. 爲什麼實體引用仍然包含在屬性中是他們實現此代碼的更好方法
- 21. 爲什麼我們需要在ImagePickerController中實現UiNavigationcontroller委託iphone
- 22. 爲什麼人們在他們的React/JSX中放入{「」}?
- 23. 他們使用什麼樣的控件?
- 24. C++中的堆棧。他們爲什麼以及何時使用?
- 25. 爲什麼我們在jQuery中使用「({})」?
- 26. 爲什麼發生字節溢出,它們實現了什麼?
- 27. 蘋果爲什麼使用這個「if let」代碼?
- 28. 爲什麼ArrayList實現使用Object []?
- 29. 蘋果在GLPaint例子上使用什麼樣的數據?
- 30. 什麼是實體框架?我們爲什麼使用它?
這將不會有任何用處。爲什麼使用VIRTUAL機器編碼性能關鍵任務(如opengl和cl) –
LLVM不是虛擬機...它是第一個編譯器 – neo571
LLVM代表什麼? –