BarraCUDA:鎖定 AMD GPU 的開源 CUDA 編譯器 (★ 205 分)
BarraCUDA 是一個以 C99 撰寫、約 1.5 萬行程式碼的開源 CUDA(NVIDIA 的 GPU 平行運算程式設計平台與語言擴充)編譯器,目標是把 .cu 原始碼直接編譯成 AMD RDNA 3(gfx1100/GFX11)可執行的機器碼,輸出為 ELF(Executable and Linkable Format,可執行與連結格式).hsaco(HSA Code Object,AMD GPU 可載入執行的程式物件)檔案。專案主打「零 LLVM(Low Level Virtual Machine,編譯器基礎建設)相依性」、不走 HIP(Heterogeneous-computing Interface for Portability,AMD 的 CUDA 類介面)轉譯層,也不要求先把 CUDA 改寫成其他語言或 API;作者形容這是試圖打破 NVIDIA「圍牆花園」的實作挑戰。雖然不使用 LLVM 來產出程式,但作者會用 `llvm-objdump` 交叉驗證指令解碼,宣稱目前做到「零解碼失敗」。建置流程也刻意維持極簡:直接 make,幾乎無外部套件相依。
其編譯流程包含前處理器(處理 #include、巨集與條件編譯)、詞彙分析、遞迴下降剖析器(產生 AST,抽象語法樹)、語意分析(型別檢查與作用域解析),再轉成自家的 BIR(BarraCUDA Intermediate Representation,中介表示)並以 SSA(Static Single Assignment,靜態單一指派)形式表達,接著做 mem2reg(將堆疊變數提升為暫存器的常見轉換),再由手寫的指令選擇將 BIR 對映到 AMDGPU 指令,完成暫存器配置(VGPR/SGPR,向量/純量暫存器),最後把 GFX11 指令編碼並輸出 ELF。作者也強調其實作風格偏向可預期與可控:資料結構多用預先配置的固定大小陣列、在熱路徑避免 malloc、避免遞迴並盡量使用有界迴圈,並在 README 分享多個 GFX11 編碼踩坑細節,反映 AMD ISA(Instruction Set Architecture,指令集架構)文件存在不一致之處。
就功能面而言,BarraCUDA 已能編譯相當多 CUDA 常用語法與特性到「可跑起來」的 GFX11 機器碼,包括 __global__/__device__/__host__、threadIdx/blockIdx 等內建索引、C 的各種控制流程、部分 C++ 範本(template)實例化、共享記憶體(__shared__,對應到 AMD 的 LDS)、__syncthreads()、多種原子操作、warp 相關內建(如 shuffle 與投票)、向量型別、半精度 __half、__launch_bounds__ 與 cooperative groups 等;編譯器本身也具備完整 C 前處理器與錯誤復原能力。作者同時列出尚未補齊的缺口(例如 const、複合指定運算子、__constant__、紋理/表面、動態平行、跨多個編譯單元與主機端程式產出等),並規劃接下來會先補齊語言缺口與強化最佳化(指令排程、更好的暫存器配置、常數折疊、死程式碼刪除、迴圈不變式外提與 occupancy 調校),長期則希望把同一套 BIR 後端延伸到 Tenstorrent、Intel Arc 乃至 RISC-V 向量延伸等其他架構。
在 Hacker News 的討論中,不少人稱讚它「make 就能建置」與整體完成度,認為更像是「從零打造 GPU 編譯器」的高含金量練功專案;但也有人指出,實務上多數 CUDA 專案倚重大量 C++ 特性與生態函式庫(如 BLAS,Basic Linear Algebra Subprograms;DNN,Deep Neural Network 相關函式庫),因此 BarraCUDA 目前更難直接取代機器學習工作負載的主流堆疊。多位留言者提到 ZLUDA(讓 CUDA 程式在非 NVIDIA GPU 上執行的相容層/轉譯專案)在「幾乎不改程式就能跑」的路線上更務實;也有人補充 AMD 其實長期以 ROCm(Radeon Open Compute,AMD 的 GPU 計算軟體堆疊)與 LLVM 後端耕耘生產環境,只是支援矩陣龐大且容易踩到相容性與效能問題。另有觀點認為 AMD 未必想「完整支援 CUDA」,因為那可能反而加深 NVIDIA 的平台護城河;也有人提醒 BarraCUDA 目前鎖定 GFX11(偏消費級 RDNA 3)而非資料中心常見的 CDNA,短期很難成為「CUDA 護城河終結者」。討論串也出現商標風險提醒(專案名稱含 CUDA 可能引來律師函),以及關於 AI 的爭論:有人把 LLVM 誤讀成 LLM(Large Language Model,大型語言模型)被其他人糾正;也有人從 README 的文字風格與 ASCII 圖質疑有大量 AI 痕跡,而作者親自回應承認會用 Ollama、Claude/ChatGPT 協助測試摘要、樣板程式與 ASCII 圖,並認為在熟練開發者手上屬合理用途。
👥 65 則討論、評論 💬
https://news.ycombinator.com/item?id=47052941