晶片層 開放閱讀

LLVM

Low Level Virtual Machine

概念 ID
low-level-virtual-machine
更新時間
2026-05-29
來源數量
待補

LLVM

3 秒看懂

LLVM(不再是 Low Level Virtual Machine 的縮寫,它就是一個名字)是一個編譯器基礎設施架構。它不是一個具體的編譯器,而是一套用於建置編譯器的“樂高積木”,核心是定義了一種與具體程式語言和CPU架構都無關的中間表示(IR),極大地降低了開發新程式語言和適配新硬體晶片的難度。

3 分鐘產業解釋

想像一下造車。如果沒有標準化的零部件(如發動機介面、電氣匯流排),每造一款新車就要從頭設計所有零件。LLVM 就是程式設計世界的“標準化汽車平台”。

  • 對於軟體開發者/程式語言設計者:只需專注於將程式碼翻譯成一種標準的“中間語言”(LLVM IR),無需關心最終要執行在 Intel、AMD 還是 ARM 的 CPU 上。這催生了 Swift、Rust、Julia 等新一代高效語言的繁榮。
  • 對於晶片公司:無論是設計新的 CPU、GPU 還是 AI 加速器,只需為目標硬體開發一個“後端編譯器”,就能自動支援所有能編譯到 LLVM IR 的程式語言(如 C/C++、Python 通過科學計算庫)。這極大地降低了新硬體的生態建置門檻,是國產 GPU 和 AI 晶片能夠快速接入主流軟體生態的關鍵技術橋樑。
  • 對於產業:LLVM 是一個開源的“製程”級別的基礎工具,是連線上層軟體智慧與下層硬體算力的核心樞紐。其生態的繁榮直接決定了一個計算平台(無論是通用CPU還是專用加速器)的生命力。

15 分鐘專家深入

LLVM 的核心價值在於其模組化與層解耦設計,這使其在 AI 時代地位愈發重要。

  1. “三頭六臂”的解耦:傳統的編譯器(如老版本GCC)是“鐵板一塊”,前端(解析語言)、最佳化器、後端(生成機器碼)緊密耦合。LLVM 將其打散:

    • 前端:負責理解不同語言(Clang 處理 C/C++/Objective-C, rustc 處理 Rust),輸出統一的 LLVM IR。
    • 最佳化器:對 LLVM IR 進行一系列與語言和硬體無關的通用最佳化(如迴圈最佳化、內聯)。
    • 後端:負責將最佳化後的 LLVM IR 翻譯成特定硬體(x86, ARM, RISC-V, 乃至 NVIDIA PTX)的機器碼。
    • 影響:語言開發者可以複用最佳化器和後端,硬體廠商可以複用前端和最佳化器。這形成了強大的網路效應
  2. LLVM IR:生態的“世界語”:這是一種強型別的、低階的類 RISC 指令集表示,它既接近高階語言語義,又易於對映到硬體。所有最佳化和分析都在 IR 層面進行。可以將其視為一個“虛擬的、理想的 CPU 指令集”。

  3. 與 GPGPU 計算的關係:NVIDIA 的 CUDA 編譯器(nvcc)內部就使用了定製化的 LLVM 版本來將 CUDA C++ 編譯成 PTX(一種中間表示)再到 SASS(機器碼)。這證明了 LLVM 架構在異構計算領域的強大適應性。對於其他 GPU 和 AI 晶片,基於 LLVM 開發編譯器是一條被驗證過的高效路徑。

  4. MLIR:面向AI的新戰場:隨著 AI 模型複雜度飆升,傳統 LLVM IR 在表示張量、圖計算等高層語義時力不從心。MLIR(Multi-Level Intermediate Representation)應運而生,它是 LLVM 專案的一部分,旨在提供一個更靈活、可擴充套件的中間表示架構,用於統一機器學習生態系統中的多種編譯器基礎設施。這是 LLVM 生態面向未來的關鍵版面配置。

技術原理(最深)

LLVM 的核心架構可由下圖描述,體現了其基於 IR 的分層與傳遞設計:

+-------------------+      +-------------------+      +-------------------+
| Source Code       |      | LLVM IR           |      | Target Machine Code|
| (C++, Rust, etc.)| ---> | (Platform-        | ---> | (x86, ARM, NVPTX) |
+-------------------+      |  Independent)     |      +-------------------+
        ^                  +-------------------+               ^
        |                           |                           |
  [Frontend]                   [Optimizer]                   [Backend]
  (e.g. Clang)               (Passes & Analyses)          (e.g. X86, AArch64)
        |                           |                           |
        +---------------------------+---------------------------+
                                    |
                            +-------------------+
                            | LLVM Libraries & Tools |
                            | (Assembler, Linker, etc.) |
                            +-------------------+
  • 關鍵資料結構LLVM Module 包含了整個編譯單元的資訊,內含 Functions, Functions 由 Basic Blocks 組成, Basic Blocks 由一系列 Instructions 組成。所有資料型別都是強型別的。
  • Pass 管理架構:最佳化器的核心是 Pass(遍)。每個 Pass 完成一項特定的分析或變換任務(如死程式碼消除、暫存器分配)。Pass 可以自由組合,形成最佳化流水線。Pass 分為 Analysis Pass(只讀,分析資訊)和 Transform Pass(修改 IR)。
  • 並行與 JIT:LLVM 支援多執行緒編譯(並行處理不同的模組或函式)。其 ORC JIT (On-Request Compilation) 架構允許在執行時動態地將 IR 編譯成機器碼,是高效能動態語言(如Julia)和資料庫查詢引擎(如Spark SQL)的加速核心。

技術演進史

  • 2000-2003(誕生):由 Chris Lattner 在伊利諾大學攻讀博士期間發起,最初作為研究專案,旨在設計一個支援全程式最佳化的編譯器架構。名字“Low Level Virtual Machine”後來被棄用。
  • 2007(關鍵轉折):Chris Lattner 加入Apple公司,開始主導將 LLVM 用於Apple的開發工具鏈。Clang(C/C++/Obj-C 前端)在此期間誕生並開源,旨在取代老舊的 GCC。
  • 2011年12月(走向主流):LLVM 3.0 釋出,被視為一個穩定、可用於生產的版本。Apple全線工具鏈(Xcode)切換到基於 LLVM/Clang。
  • 2015-2019(生態爆發):Rust 語言將 LLVM 作為其預設後端;Emscripten(將 C/C++ 編譯到 WebAssembly)基於 LLVM 建置;各大硬體廠商(包括 NVIDIA、Google、AMD)紛紛將 LLVM 整合到其編譯器中。
  • 2019-今(AI與異構擴充套件):MLIR 子專案啟動並快速發展,旨在解決 AI 領域的編譯器碎片化問題。LLVM 成為 RISC-V 架構事實上的標準編譯器工具鏈。

技術路線對比(量化表)

特性LLVM/ClangGCC (GNU Compiler Collection)備註
架構高度模組化,基於庫的設計。傳統單體架構,近年來也在改進。LLVM 的模組化是其最大技術優勢。
語言支援前端可獨立開發。Clang 專注 C 族,Rust/Swift 等有獨立前端。前端與後端耦合較深。LLVM 對新興語言更友好。
中間表示LLVM IR, 穩定、強型別、公開設計。GIMPLE/RTL, 內部表示。LLVM IR 的公開性促進了生態擴充套件。
最佳化能力極強,在最佳化現代C++、連結時最佳化(LTO)方面領先。極強,在 Fortran、傳統 HPC 領域積累深厚。兩者最佳化水平處於同一梯隊,側重不同。
硬體支援x86, ARM, RISC-V, AMDGPU, NVPTX, WebAssembly, BPF 等,擴充套件性極佳。x86, ARM, RISC-V, 眾多專用架構,支援廣泛。兩者都覆蓋主流架構,LLVM 在新興和專用架構(如BPF)上更活躍。
社群/開發模式基於 Apache 2.0 with LLVM Exceptions, 由 LLVM 基金會管理,商業公司貢獻巨大(Apple、Google、輝達等)。GPLv3, 由自由軟體基金會管理,社群驅動。許可證差異導致商業模式不同,LLVM 對商業整合更友好。
編譯速度通常被認為在同等最佳化級別下編譯更快編譯速度稍慢,尤其在高最佳化級別。這得益於 LLVM 的模組化設計和現代程式碼庫。
除錯支援生成 DWARF 除錯資訊,支援良好。DWARF, 支援非常成熟。兩者都支援標準除錯格式。
代表成就成為Apple預設工具鏈、Android NDK 預設、Rust/Swift 後端、CUDA 編譯器核心。Linux 生態基石、GCC 是許多作業系統和科學計算軟體的傳統選擇。兩者都在各自領域佔據主導地位,形成“雙巨頭”格局。

上下游

  • 上游(輸入)
    • 程式語言:C, C++, Rust, Swift, Objective-C, Julia, Scala (via GraalVM), 以及各種領域特定語言(DSL)。
    • 硬體架構規範:x86, ARM, RISC-V, 以及各加速器(GPU, TPU, NPU)的指令集手冊。
    • 演算法與最佳化理論:編譯器最佳化理論、圖形分析演算法等。
  • 核心(LLVM本身):編譯器前端、最佳化器(一系列Pass)、後端、連結器、JIT引擎、MLIR等工具庫。
  • 下游(輸出與消費者)
    • 可執行程式:本地機器碼。
    • 中間程式碼:WebAssembly (.wasm), SPIR-V (用於 Vulkan 圖形API), PTX (NVIDIA GPU)。
    • 執行時環境:語言執行時(如 JVM、.NET 通過 LLVM 加速),資料庫查詢引擎,AI 架構編譯器(如 PyTorch/XLA, TVM 的部分後端)。
    • 開發工具:IDE(程式碼補全、靜態分析)、偵錯程式、效能分析器。
    • 終端使用者:所有使用上述語言和硬體的軟體開發者。

關鍵指標

  1. 前端語言支援數量:衡量生態廣度。官方與社群支援的語言/方言超過50種。
  2. 後端硬體目標支援數量:衡量硬體生態接入能力。活躍支援的目標超過15個。
  3. 編譯速度:單位時間內處理程式碼行數(LOC/s)或指令數。在-O0(無最佳化)級別通常顯著快於GCC。
  4. 生成程式碼效能:在標準基準測試(如SPEC CPU, Geekbench)中,與GCC生成的程式碼進行對比。兩者互有勝負,在不同測試集上領先。
  5. 最佳化級別效果:-O1, -O2, -O3, -Os, -Oz 等最佳化級別下,程式碼大小和執行時間的權衡。
  6. 社群活躍度:每月提交的程式碼補丁數、活躍開發者數量、郵件列表討論熱度。這是一個健康的頂級開源專案。
  7. 商業採用率:在雲端廠商(AWS, Azure, GCP)、晶片公司(所有主流CPU/GPU/AI晶片公司)、科技巨頭(FAANG)內部工具鏈中的滲透率。

供需與市場資料

  • 供應:完全開源,由 LLVM 基金會管理。核心貢獻者來自Apple、Google、輝達、AMD、英特爾、華為等科技巨頭及學術機構。基金會通過舉辦開發者會議、管理商標和法律事務來支援社群。
  • 需求:需求方是所有需要建置編譯器的實體。分為兩類:
    1. 直接需求:程式語言團隊(需要後端)、硬體公司(需要前端和最佳化器)、編譯器工具鏈供應商(如 IAR, Arm Compiler)。
    2. 衍生需求:依賴 LLVM 生態建置產品的企業,如AI 晶片公司(其軟體棧的核心)、高效能運算公司、雲端服務商。
  • 市場資料:LLVM 本身不產生直接營收,其價值體現在賦能的龐大生態中。LLVM 工具鏈在現代軟體開發中佔據核心地位,但其精確的直接或間接依賴比例難以量化。在移動裝置(iOS/Android)和新興 RISC-V 領域,這一比例接近100%。其衍生出的商業支援、定製開發和培訓服務是一個小眾但穩定的市場。

代表公司與資本對映

  • 深度貢獻與採用巨頭
    • Apple:最大使用者和早期關鍵推動者。Swift 和 Objective-C 編譯器、整個 macOS/iOS 開發工具鏈核心。(受益:自身生態粘性與競爭力)
    • Google:Android NDK 預設編譯器、TensorFlow 編譯器後端(XLA)的部分使用、為 Clang/LLVM 貢獻大量程式碼。(受益:Android 生態、雲端 AI 服務)
    • 輝達:CUDA 編譯器核心使用 LLVM,是其 GPU 計算生態的基石之一。(受益:CUDA 護城河)
    • AMD:ROCm(對標CUDA)平台中的 GPU 編譯器基於 LLVM。(受益:追趕 CUDA 生態)
    • 英特爾:ISPC(隱式 SPMD 程式編譯器)等工具基於 LLVM,OneAPI 工具鏈也深度整合。(受益:異構計算戰略)
  • 關鍵生態受益方
    • 所有 AI 晶片初創公司(如寒武紀、地平線等):其軟體開發工具鏈幾乎必然基於 LLVM 建置,以降低開發成本,快速支援主流程式設計架構。(LLVM 是其“賣鏟子”的關鍵供應商)
    • RISC-V 晶片公司(如 SiFive、平頭哥):LLVM 是 RISC-V 架構事實上的官方編譯器,是其建置軟體生態的生命線。(LLVM 是 RISC-V 生態的基石)
    • 雲端服務商(AWS, Azure, GCP):在其自研晶片(如 AWS Graviton/Trainium, Google TPU)的軟體棧中廣泛使用 LLVM 相關工具。

投資邏輯

LLVM 的投資邏輯是 “基礎設施賦能”和“賣鏟子”邏輯,主要體現在以下幾個方面:

  1. AI 晶片競賽的“賣鏟人”:任何一家想進入 AI 加速器市場的公司,都必須建置基於 LLVM 的軟體棧。投資 LLVM 生態的成熟度,就是投資新硬體公司的成功機率。關注那些在 LLVM 社群有深厚技術積累和貢獻的團隊,以及為晶片公司提供 LLVM 相關定製開發服務的公司。
  2. 計算自主化的“作業系統”級工具:在追求供應鏈安全和計算自主的背景下(如中國的“信創”),基於 LLVM 建置自主可控的編譯器工具鏈是必經之路。投資相關編譯器技術公司,等同於投資底層軟體基礎設施的自主化。
  3. RISC-V 生態的核心:RISC-V 的崛起與 LLVM 的強大密不可分。投資 RISC-V 不可忽視 LLVM 工具鏈的成熟度和商業支援。同樣,基於 LLVM 的 RISC-V 工具鏈提供商具有明確價值。
  4. 軟體定義硬體的橋樑:隨著 MLIR 等技術的發展,LLVM 生態正在從“編譯到固定硬體”向“編譯並影響硬體設計”演進。在可重構計算、領域專用架構等領域,LLVM/MLIR 工具鏈將成為軟硬體協同設計的核心,這是長期的技術演進方向。

常見誤讀糾偏

  • 誤讀一:“LLVM 是一個虛擬機器。”
    • 糾正:這是其歷史名稱(Low Level Virtual Machine)帶來的最大誤解。LLVM 不是一個傳統意義上的、在執行時解釋執行位元組碼的虛擬機器(如 JVM)。它是一個編譯器基礎設施。其“虛擬”體現在它定義了一個理想化的、與具體硬體無關的 IR 虛擬指令集,但這個指令集最終都會被“編譯”成真實的機器碼直接執行,而非解釋執行。雖然它有 JIT 功能,但那只是其眾多工具之一。
  • 誤讀二:“LLVM 只是給 CPU 用的。”
    • 糾正:LLVM 的後端可以針對任何能執行指令的硬體,包括 GPU、DSP、FPGA 乃至專用的 AI 加速器。事實上,如前所述,NVIDIA 和 AMD 的 GPU 編譯器都大量使用了 LLVM。它的目標是成為所有計算硬體的通用編譯器前端與最佳化器
  • 誤讀三:“MLIR 是 LLVM IR 的替代品。”
    • 糾正:MLIR 不是 LLVM IR 的替代品,而是補充和擴充套件。MLIR 的目標是處理比 LLVM IR 更高層、更領域特定(如機器學習張量圖、硬體描述)的表示。它最終可以降級到 LLVM IR,從而複用 LLVM 成熟的後端。兩者是協作關係,共同構成一個多層次的編譯棧。

學習路徑

  1. 概念入門:閱讀 LLVM 官網的 “Introduction to the LLVM Compiler”“LLVM Tutorial: Kaleidoscope”,通過實現一個簡單語言來理解全流程。
  2. IR 精通:學習 LLVM IR Language Reference Manual。這是核心文件。手動編寫一些簡單的 .ll 檔案,使用 llclli 工具進行編譯和執行。
  3. 實踐最佳化:編寫簡單的 C 程式,使用 clang -O0 -S -emit-llvm 生成未最佳化 IR,再對比 clang -O3 生成的 IR,分析最佳化效果。學習編寫自定義的 LLVM Pass。
  4. 深入後端:選擇一個感興趣的目標(如 RISC-V),研究 LLVM 後端程式碼結構(位於 llvm/lib/Target/)。理解指令選擇、暫存器分配等關鍵步驟。
  5. 參與社群:訂閱 LLVM 的開發者郵件列表 (llvm-dev),閱讀提交記錄,嘗試修復簡單的 bug(如標記為 “beginner” 的任務)。參加 LLVM 開發者大會。

一句話總結

LLVM 是建置現代計算生態的 “編譯器樂高”和“硬體適配層”,它通過標準化的中間表示(IR)解耦了軟體創新與硬體迭代,是 AI 晶片競賽、RISC-V 崛起和計算自主化背後看不見的基石。

延伸閱讀與來源

  • 官方權威LLVM 官網 —— 文件、教程、部落格、釋出版本。
  • 核心論文:Chris Lattner, Vikram Adve. “LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation” (2004). —— 描述最初架構的經典論文。
  • 深度書籍:《Getting Started with LLVM Core Libraries》 by Bruno Cardoso Lopes, Rafael Auler. —— 實踐導向的入門書。
  • MLIR 專題MLIR 官網 —— 瞭解 LLVM 面向未來的新戰場。
  • 行業視角:各晶片公司(如 NVIDIA, AMD, Intel, SiFive)的技術部落格,常有關於其如何使用或貢獻 LLVM 的深度文章。
source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型