這項由清華大學相關團隊主導的研究發布於2026年5月,預印本編號為arXiv:2605.04956,有興趣深入了解的讀者可以通過該編號查詢完整論文。
在當今人工智慧飛速發展的時代,訓練一個大模型就像開一家超級工廠——不僅需要設計精妙的生產流程,還需要每一台機器都高效運轉。GPU(圖形處理器)就是這座工廠里最核心的"機器",而控制這台機器的底層程序,就叫做"GPU核心"(GPU Kernel)。近年來,研究人員開始嘗試讓大型語言模型(LLM)——也就是類似ChatGPT這樣的AI——自動編寫這些底層程序,省去人工調優的巨大成本。
然而,一個關鍵問題長期懸而未決:這些AI到底在哪類任務上能寫好,在哪類任務上會"翻車",原因又是什麼?這項研究的出發點正是回答這個問題。研究團隊構建了一套名為KernelBenchX的評測框架,系統地測試了五種具有代表性的AI代碼生成方法,覆蓋176個任務、15個類別,並在六塊不同型號的英偉達
GPU上進行了全面測試。
---
一、為什麼要讓AI寫GPU底層代碼?
要理解這項研究的意義,先要搞清楚一件事:編寫GPU底層代碼有多難,又有多重要。
回到工廠的比喻:普通程序員寫的代碼,就像是給工廠下達"生產100個零件"的總指令;而GPU核心代碼,則是精確到每一條流水線、每一個工人的排班表。寫好了,工廠產能翻倍;寫差了,機器空轉,電費白花。DeepSeek-V3
這類頂尖AI系統之所以能以更低的算力跑出更好的性能,很大程度上就得益於精心手寫的底層核心代碼。
手工優化這些代碼需要極深的專業知識,不僅要懂數學算法,還要懂晶片架構、內存頻寬、並行計算……這讓很多研究團隊開始想:能不能讓AI來代勞?
目前主流的方法有幾個方向:一是直接訓練AI讓它專門學會寫這類代碼(比如AutoTriton、TritonRL);二是搭建一套"智能體"系統,讓AI自己寫、自己測、自己改(比如GEAK、STARK);三是結合搜索和推理的混合方法(比如KernelEvolve、ReGraph)。與此同時,已有一些評測基準(如KernelBench、TritonBench)嘗試衡量這些方法的效果,但它們都存在明顯的局限性——缺乏對任務類別的細緻劃分,正確性驗證不夠嚴格,對硬體效率的衡量也比較有限。
KernelBenchX正是為了填補這些空白而生。
---
二、KernelBenchX是怎麼設計的?
研究團隊給KernelBenchX定下了三個核心目標:第一,把任務按照計算結構分門別類,看清楚哪類任務容易、哪類任務難;第二,用更嚴格的方式驗證AI生成的代碼是否真的"對";第三,不只看速度,還要看代碼對硬體資源的利用率。
在任務分類上,176個任務被劃入15個類別,涵蓋激活函數(Activation)、卷積(Convolution)、融合算子(Fusion)、索引操作(Index)、線性代數(LinearAlgebra)、損失函數(Loss)、數學運算(Math)、矩陣乘法(MatrixMultiply)、歸一化(Normalization)、優化器(Optimizer)、池化(Pooling)、量化(Quantization)、隨機操作(Random)、歸約(Reduce)和空間操作(SpatialOps)。這些類別不是按照算子名稱劃分的,而是按照"需要什麼類型的知識才能寫對"來區分的——這個區分方式後來被證明非常有價值。
此外,研究還特別增加了兩類難度較高的任務:一是fp16、bf16、int8等低精度數值格式的多精度變體,測試AI能否在低精度約束下生成正確代碼;二是六個量化任務(W8A8和W4A16格式),專門測試AI能否手動實現量化邏輯——包括計算縮放係數、顯式類型轉換和反量化,而不是偷懶調用現成的高層API。
在正確性驗證上,研究採用了"兩階段"策略。第一階段檢查代碼能不能被編譯運行,以及有沒有違反任務約束(比如量化任務有沒有調用被禁止的API)。第二階段才是真正的執行正確性測試——不僅用正常分布的輸入數據測試,還專門注入"異常值"(出現概率0.1%,幅度放大50倍的極端數據)來檢驗代碼在邊緣情況下是否依然正確。對於量化任務,更要求餘弦相似度、L1相對誤差、均方根誤差三項指標同時達標,而不是簡單比較輸出是否一致。
在硬體效率評估上,研究團隊引入了兩個歸一化指標:IOU(內存頻寬利用率,即實際用到的頻寬占硬體峰值頻寬的比例)和MFU(計算資源利用率,即實際完成的浮點運算占硬體峰值算力的比例)。由於不同任務有的是"內存瓶頸型"(瓶頸在數據搬運),有的是"算力瓶頸型"(瓶頸在計算),研究取兩者中的較大值作為綜合效率代表。代碼質量方面則用可維護性指數(MI)和圈複雜度(CC)來衡量。
---
三、參賽選手:五種AI方法各顯神通
研究團隊選取了五種具有代表性的方法進行橫向比較,覆蓋了從"專門訓練的專家"到"通用模型零樣本挑戰"的整個譜系。
第一位是AutoTriton,這是一個專門針對Triton編程(一種用於編寫GPU核心的中間語言)訓練的模型,訓練方式結合了監督微調和強化學習,相當於經過了專門的"職業技能培訓",以單次生成模式參與測試。
第二位是GEAK,一個具備生成、評估、反思和優化四個模組的智能體框架,底層使用DeepSeek-V3.2-Chat模型。它運行三輪疊代,每輪生成四個候選方案,並保留歷史上最好的五個實現作為參考,相當於有一套"自我復盤"機制的選手。
第三位是KernelAgent,同樣是多智能體系統,採用"生成—驗證—精煉"的工作流,底層也是DeepSeek-V3.2-Chat。它使用3個並行工作進程,每個工作進程最多進行5輪精煉,溫度參數設為0.4(意味著生成結果更穩定保守)。
第四位是Claude,一個強大的通用大模型,以單次生成模式參與測試,代表"聰明的通才"。
第五位是DeepSeek-Coder(論文中稱KernelLLM),一個通用代碼模型,作為"零專業化基線"參與測試,代表"沒有經過任何專項訓練的普通代碼助手"。
---
四、總體成績單:三關各顯差異
研究的第一個重大發現來自總體結果表格。編譯成功、語義正確、實際加速,這三道關卡是完全獨立的——通過了上一關,並不意味著能通過下一關。
KernelAgent有64.2%的代碼能成功編譯,看起來不錯;但在這些編譯成功的代碼里,只有10.8%真正計算結果正確,也就是說"編譯通過率到正確率"的轉化率只有16.8%。這就像一家工廠的機器能啟動(編譯通過),但大部分產品其實是次品(執行結果錯誤)。
表現最好的GEAK,正確率也只有30.7%;Claude為22.7%;AutoTriton為17.0%。DeepSeek-Coder幾乎全軍覆沒,編譯率只有1.7%,正確率為0。最讓人意外的是,KernelAgent的高編譯率配上低正確率,說明"能寫出看起來像樣的代碼"和"能寫出真正正確的代碼"是兩回事。
這個結果讓研究團隊意識到:與其糾結於誰的總分最高,不如深挖"在哪類任務上為什麼失敗"——於是引出了三個核心發現。
---
五、第一個發現:任務的結構,比方法的設計更重要
如果把五種方法比作五位廚師,把任務類別比作不同菜系,研究發現:決定一道菜能不能做好的,與其說是廚師的廚藝差異,不如說是菜系本身的難度。
研究團隊用統計方法量化了"方法身份"和"任務類別"各自能解釋多少正確率的差異。結果非常明確:在語義正確率上,任務類別能解釋9.4%的變異,而方法身份只能解釋3.3%——類別的影響力接近方法的三倍。換句話說,你把一道極難的菜交給任何一位廚師,大概率都做不好;而一道簡單的菜,任何廚師都能做出來。
從數據上看,Math(數學運算)和Activation(激活函數)這類任務,平均編譯率分別達72.2%和70%,正確率分別為40.3%和32.5%,"編譯轉正確"的比例接近46%到56%。而Fusion(融合算子)和MatrixMultiply(矩陣乘法)的"編譯轉正確"比例只有約25%。最極端的是Quantization(量化)和SpatialOps(空間操作):編譯率不低(量化為41.7%,空間操作為25%),但正確率統統為0——五種方法、30次嘗試,無一成功。
為什麼會這樣?研究團隊發現,失敗集中在那些"需要維護全局一致性"的任務上。簡單任務(如激活函數)的特點是:每個輸出只依賴於一個輸入,計算是完全局部的,不需要跨越不同的並行執行單元進行協調。而困難任務(如融合算子)的特點恰恰相反:正確性要求在多個維度、多種內存布局、多個並行執行實例之間維持一致的張量語義——這種"全局契約"靠局部修補根本無法彌補。
研究團隊還嘗試用代碼靜態複雜度指標(比如圈複雜度、中間賦值數量、融合調用次數)來預測失敗率,結果相關係數最高只有約0.21,遠不足以解釋失敗的根本原因。這確認了:失敗不是因為代碼太長太複雜,而是因為存在一道真正的語義理解邊界。
---
六、第二個發現:多輪疊代讓代碼"更對",但不讓它"更快"
GEAK這類"智能體"方法的核心賣點就是多輪疊代——寫了改,改了再測,測完再改。研究詳細追蹤了GEAK三輪疊代的全過程,結果既令人振奮又令人警醒。
振奮的部分:編譯率從第0輪的52.3%上升到第2輪的68.8%,正確率從18.2%上升到30.7%,疊代確實在持續修復錯誤。
令人警醒的部分:平均加速比(相對於PyTorch基線的速度提升)卻從第0輪的1.58倍下降到第2輪的1.44倍;綜合評分也從62.7%下降到53.3%。也就是說,代碼越來越"對"了,但跑得越來越"慢"了。
為什麼會這樣?研究團隊深入分析了352對相鄰輪次的代碼差異,找到了答案。這些修改里,"沒有實質性改動"有102處,"掩碼修復"有101處,"引入或移除委託操作"有65處,"數據類型和類型轉換修復"有36處——真正面向性能優化的代碼重寫則寥寥無幾。
這揭示了一個結構性不對稱:錯誤修復依賴的是顯式的、局部的錯誤信號(編譯報錯、形狀不匹配、輸出數值錯誤),而性能優化需要的是對"分塊策略、內存布局、核心邊界"的整體性決策,這類資訊根本不會出現在正確性反饋里。
新被"救活"的正確核心(第0到第1輪新增正確的那些)平均加速比只有1.16倍,評分只有43.7%;而從一開始就正確的核心平均加速比達1.58倍,評分62.9%。第1到第2輪新增的正確核心也類似:1.32倍對比1.46倍。這說明,疊代優先找到那些"容易被救活"的代碼,而這些代碼恰恰是性能較弱的那批。
案例印證了這一點:在Index/expand_where這個任務上,GEAK第0輪代碼無法編譯,第1輪編譯通過但結果錯誤,第2輪終於正確——但實測加速比只有0.076倍,也就是說比PyTorch慢了13倍以上。疊代把它救活了,但救出來的是一個極其低效的實現。
---
七、第三個發現:"寫對了"不等於"跑得快"
即便排除掉所有錯誤的代碼,只看那些通過了正確性驗證的核心,性能表現也相當令人失望。
在所有正確的核心裡,有46.6%的速度比PyTorch的即時執行模式還要慢。全部正確核心的加速比中位數只有1.0008倍——幾乎沒有任何提升。這相當於花了大量精力手工調製了一道菜,結果味道和速凍食品差不多。
跨硬體可移植性的問題更嚴重。同一個核心在不同GPU上的最大加速比與最小加速比之間的比值,中位數為2.15倍,均值為2.73倍,最極端的情況達到了21.4倍。同一段代碼,在A100上只有18%的正確核心比PyTorch慢,在L20上這個比例飆升到76%。這說明AI生成的核心往往只是在某種"假想的通用硬體"上優化,換一塊真實的不同GPU,性能就可能崩潰。
研究團隊分析了背後的三個根本原因。第一,訓練數據缺乏性能標註——現有LLM的訓練語料把代碼當成語義文本來學,而不是硬體行為的描述,模型能學會寫出"看起來像高效核心"的代碼,但不會理解它為什麼快或慢。第二,提示詞不包含硬體上下文——現有方法都沒有把目標硬體的規格(顯存大小、頻寬、計算單元數量)作為輸入提供給模型,模型自然無法針對特定硬體做出合理的分塊、並發、內存訪問決策。第三,疊代反饋無法驅動性能優化——因為編譯錯誤和正確性反饋都不能告訴模型"這段代碼是內存瓶頸還是計算瓶頸",而性能優化恰恰需要這類資訊。
---
八、量化任務:一個特殊的失敗案例
量化任務值得單獨說明,因為它的失敗方式與其他困難類別不同。
所謂量化(Quantization),是指把模型的權重和激活值從高精度浮點數(如32位)壓縮到低精度整數(如8位或4位),以節省內存和提升速度。這是當前大模型部署中的關鍵技術。KernelBenchX中的六個量化任務(包括matmul_w8a8、bmm_w8a8、conv2d_w8a8、layernorm_w8a8、attention_w8a8和linear_w4a16)要求AI必須手動實現量化邏輯,包括計算縮放係數、顯式類型轉換和反量化,而不能調用現成的高層API。
這六個任務的編譯率不低(GEAK為50%,KernelAgent為83.3%),說明AI能寫出可以編譯的代碼;但正確率為零——五種方法加起來30次嘗試,全部失敗。這不是簡單的語法錯誤,而是AI對"數值計算契約"存在系統性誤解:它不理解量化過程中精度損失的邊界條件,不理解縮放係數的計算規範,也不理解量化誤差的可接受範圍。就像一個廚師能寫出食譜(代碼可以編譯),但根本不理解食材配比的化學反應(數值行為),自然做不出合格的菜。
---
九、對未來的啟示
研究團隊認為,當前LLM生成GPU核心的能力邊界,不是一堵單一的牆,而是一段連續的台階:可編譯性、語義正確性、硬體效率、跨平台可移植性,每一級台階都需要不同的方法才能跨越。
靠提示詞工程和疊代精煉能跨越第一級(可編譯性),也能部分跨越第二級(語義正確性),但結構上無法解決第三、四級的問題。
研究團隊提出了幾個可能的改進方向。對於正確性,需要讓模型真正理解跨並行實例的張量語義和歸約語義,而不僅僅是模仿局部代碼片段。對於性能,需要明確的硬體感知生成機制,例如把硬體規格作為輸入提供給模型,或者引入性能反饋信號(如屋頂線分析、頻寬利用率)到疊代循環中。對於量化,需要讓模型的訓練信號真正獎勵數值精度,而不僅僅獎勵輸出形似。
研究團隊還特別提出了兩個具體方向:一是基於性能剖析的超參數搜索(在已經正確的核心上調整塊大小、線程束數量等硬體敏感參數,找到更優的配置);二是硬體感知訓練(在訓練時把硬體規格和跨平台性能結果一起暴露給模型,讓它學會理解實現選擇與不同處理器之間的交互關係)。
研究團隊還公開發布了評測過程中收集的"錯誤修復對"和"優化對"數據集,也就是那些從錯誤到正確、從低效到高效的代碼變化記錄,希望能支持後續的專項訓練和推理改進研究。
---
說到底,這項研究做的事情,是給當前最先進的AI代碼生成方法做了一次全面、系統的"體檢"——不是為了捧誰或黑誰,而是找出真正的短板在哪裡。結果顯示,AI寫GPU代碼這件事,在某些特定類型的簡單任務上已經相當可靠,但在需要理解全局邏輯、跨實例協調、數值精度契約的複雜任務上,依然存在系統性的理解盲區。更關鍵的是,就算AI寫"對"了,也並不意味著寫得"好"——在真實硬體上跑得快,是完全另一個層次的挑戰。
這對普通人意味著什麼?短期內,AI輔助GPU編程會更多地承擔"能跑通"的工作,而"跑得快"依然需要人類專家介入。對於關心AI發展速度和算力成本的人來說,這項研究指出了一條清晰的路:不是拼命堆更多疊代輪次,而是從根本上改變訓練信號和生成機制。讀完這項研究,或許你也會思考:當AI成為寫代碼的助手,誰來驗證它真的理解了背後的"物理規律",而不只是在模仿表面的語言模式?
如有興趣深入了解,完整論文可通過預印本編號arXiv:2605.04956查閱。
---
Q&A
Q1:KernelBenchX和其他GPU核心評測基準(如KernelBench、TritonBench)有什麼本質區別?
A:KernelBenchX主要在三個方面進行了改進。其一是採用兩階段正確性驗證,不只測試正常輸入,還專門注入極端異常值來防止代碼"矇混過關"。其二是建立了基於計算結構的15類任務分類體系,而非簡單按算子名稱分類,從而能定位系統性失敗模式。其三是引入了硬體效率指標(內存頻寬利用率IOU和計算利用率MFU),並在六塊不同型號GPU上測試了跨硬體可移植性。
Q2:量化任務為什麼所有方法都以0%正確率失敗,而編譯率卻不低?
A:量化任務的編譯率不低(部分方法超過50%甚至80%),說明AI能寫出語法正確、可以運行的代碼。但正確率為零,說明失敗不在語法層面,而在於模型對量化的數值計算契約存在系統性誤解——它不理解縮放係數的計算規範、類型轉換的精度邊界以及量化誤差的可接受範圍,導致代碼運行後輸出結果完全不符合要求。這是一種深層的語義理解缺失,而非表面的代碼錯誤。
Q3:GEAK多輪疊代為什麼會讓平均加速比下降?
A:疊代過程優先修復那些有明確錯誤信號(如編譯報錯、輸出數值錯誤)的代碼,這些"容易被救活"的代碼往往本身性能就較弱。新被修復的正確核心平均加速比只有1.16倍,而從一開始就正確的核心平均為1.58倍。分析352對代碼差異後發現,疊代修改以掩碼修復、類型轉換修復等局部操作為主,缺乏面向分塊策略和內存布局的整體性性能優化,所以整體平均加速比隨疊代輪次下降。






