在2025年5月,來(lái)自斯坦福大學(xué)、伊利諾伊大學(xué)香檳分校、卡內(nèi)基梅隆大學(xué)和Visa研究院的研究團(tuán)隊(duì)發(fā)表了一篇引人注目的論文。這篇由Anjiang Wei、Tarun Suresh、Huanmi Tan、Yinglun Xu、Gagandeep Singh、Ke Wang和Alex Aiken共同完成的研究,探討了如何利用大語(yǔ)言模型(LLM)優(yōu)化匯編代碼性能。該論文題為《通過(guò)強(qiáng)化學(xué)習(xí)改進(jìn)大語(yǔ)言模型的匯編代碼性能》(Improving Assembly Code Performance with Large Language Models via Reinforcement Learning),發(fā)表于arXiv預(yù)印本平臺(tái)(arXiv:2505.11480v1)。
近幾年來(lái),大語(yǔ)言模型在編程領(lǐng)域展現(xiàn)出了驚人的能力,從代碼生成到程序修復(fù),表現(xiàn)都相當(dāng)出色。然而,在代碼優(yōu)化特別是底層代碼優(yōu)化方面的潛力卻尚未被充分挖掘。想象一下,如果你擁有一個(gè)智能助手,它不僅能幫你寫代碼,還能自動(dòng)讓這些代碼運(yùn)行得更快、更高效,那將會(huì)是多么便利的體驗(yàn)。這正是這項(xiàng)研究想要實(shí)現(xiàn)的目標(biāo)。
傳統(tǒng)上,優(yōu)化匯編代碼的工作主要由編譯器完成。就像廚師按照固定的菜譜制作料理一樣,現(xiàn)代編譯器如GCC會(huì)按照預(yù)設(shè)的規(guī)則對(duì)代碼進(jìn)行一系列優(yōu)化轉(zhuǎn)換。但這種方法面臨一個(gè)經(jīng)典問(wèn)題:優(yōu)化步驟的順序會(huì)大大影響最終生成代碼的性能,就像烹飪步驟的順序會(huì)影響菜肴的口感一樣。由于優(yōu)化空間異常龐大,編譯器經(jīng)常無(wú)法找到最優(yōu)解,留下了很大的性能提升空間。
另一種方法是所謂的"超級(jí)優(yōu)化"(superoptimization),它會(huì)在所有可能的等價(jià)程序中搜索性能最佳的版本。這有點(diǎn)像不按食譜烹飪,而是嘗試所有可能的烹飪方法,直到找到最美味的那一個(gè)。理論上,這種方法可以產(chǎn)生最優(yōu)的代碼。但實(shí)際上,隨著程序大小的增加,搜索空間呈指數(shù)級(jí)增長(zhǎng),使得窮舉搜索在實(shí)際應(yīng)用中變得不可行。而且,以往的超級(jí)優(yōu)化工作主要針對(duì)沒(méi)有循環(huán)的直線代碼,因?yàn)檫@類代碼更容易進(jìn)行形式化驗(yàn)證,確保優(yōu)化后的代碼與原始代碼在功能上完全等價(jià)。
面對(duì)這些挑戰(zhàn),研究團(tuán)隊(duì)提出了一個(gè)創(chuàng)新性的思路:利用大語(yǔ)言模型的強(qiáng)大能力來(lái)優(yōu)化匯編代碼。與高級(jí)語(yǔ)言相比,匯編代碼更接近硬件,提供了對(duì)執(zhí)行過(guò)程的精細(xì)控制,能夠?qū)崿F(xiàn)高級(jí)語(yǔ)言難以表達(dá)的優(yōu)化。然而,這種設(shè)置也帶來(lái)了新的挑戰(zhàn)。匯編代碼在預(yù)訓(xùn)練語(yǔ)料庫(kù)中相對(duì)稀少,可能導(dǎo)致大語(yǔ)言模型難以有效推理其行為。此外,GCC等工業(yè)級(jí)編譯器經(jīng)過(guò)了數(shù)十年的精心調(diào)校,要在其最高優(yōu)化級(jí)別(-O3)的基礎(chǔ)上進(jìn)一步提升性能,無(wú)疑是一項(xiàng)技術(shù)挑戰(zhàn)。
研究團(tuán)隊(duì)巧妙地將強(qiáng)化學(xué)習(xí)技術(shù)應(yīng)用到大語(yǔ)言模型的訓(xùn)練中,以解決低級(jí)代碼優(yōu)化的挑戰(zhàn)。如圖1所示,他們使用了近端策略優(yōu)化(Proximal Policy Optimization, PPO)來(lái)訓(xùn)練大語(yǔ)言模型,并設(shè)計(jì)了同時(shí)考慮正確性和性能的獎(jiǎng)勵(lì)函數(shù)。正確性通過(guò)程序特定的測(cè)試用例來(lái)評(píng)估,而性能則通過(guò)與gcc -O3基線相比的加速比來(lái)衡量。
為了支持這個(gè)設(shè)定,研究團(tuán)隊(duì)構(gòu)建了一個(gè)包含8,072個(gè)真實(shí)世界匯編程序的新數(shù)據(jù)集,這些程序源自競(jìng)爭(zhēng)性編程提交。每個(gè)實(shí)例包括輸入-輸出測(cè)試用例和由編譯器在最高優(yōu)化級(jí)別生成的基準(zhǔn)匯編代碼,作為進(jìn)一步優(yōu)化的起點(diǎn)。
在這項(xiàng)研究中,他們?cè)u(píng)估了包括開(kāi)源和商業(yè)模型在內(nèi)的21個(gè)最先進(jìn)的語(yǔ)言模型。從基礎(chǔ)模型Qwen2.5-Coder-7B-Instruct開(kāi)始,經(jīng)過(guò)PPO訓(xùn)練后,他們的模型Qwen2.5-Coder-7B-PPO在編譯通過(guò)率和測(cè)試通過(guò)率上都達(dá)到了96.0%,平均加速比達(dá)到1.47倍,遠(yuǎn)超所有其他評(píng)估模型,包括Claude-3.7-sonnet。
下面,讓我們一起深入了解這項(xiàng)研究的細(xì)節(jié),探索它如何突破傳統(tǒng)編譯優(yōu)化的限制,為代碼性能提升開(kāi)辟新的可能性。
一、研究背景與問(wèn)題定義
想象一下你正在開(kāi)發(fā)一個(gè)需要處理海量數(shù)據(jù)的應(yīng)用程序。即使是程序執(zhí)行速度提升1%,也能在長(zhǎng)時(shí)間運(yùn)行中節(jié)省大量計(jì)算資源和等待時(shí)間。在這個(gè)場(chǎng)景下,代碼優(yōu)化變得尤為重要。
傳統(tǒng)上,編譯器負(fù)責(zé)將我們寫的高級(jí)語(yǔ)言代碼(如C語(yǔ)言)轉(zhuǎn)換成計(jì)算機(jī)能直接執(zhí)行的匯編代碼。在這個(gè)過(guò)程中,編譯器會(huì)應(yīng)用各種優(yōu)化技術(shù)來(lái)提高代碼效率。就像一位經(jīng)驗(yàn)豐富的廚師知道如何在不改變菜肴口味的前提下,通過(guò)調(diào)整烹飪步驟來(lái)縮短烹飪時(shí)間一樣,編譯器會(huì)在保持程序功能不變的前提下,使程序運(yùn)行得更快。
研究團(tuán)隊(duì)關(guān)注的問(wèn)題是:盡管現(xiàn)代編譯器如GCC已經(jīng)相當(dāng)強(qiáng)大,但它們?nèi)匀灰蕾囉陬A(yù)設(shè)的規(guī)則和轉(zhuǎn)換序列,這使得它們?cè)诿鎸?duì)復(fù)雜程序時(shí)往往無(wú)法找到最優(yōu)解。這就像一位只按照固定菜譜烹飪的廚師,雖然能做出美味佳肴,但可能錯(cuò)過(guò)了更高效的烹飪方法。
研究團(tuán)隊(duì)提出的任務(wù)可以定義為:給定一個(gè)用高級(jí)語(yǔ)言(如C)編寫的程序C和由gcc -O3編譯生成的匯編程序P,目標(biāo)是生成一個(gè)新的匯編程序P',使得P'在保持與P功能等價(jià)的前提下,運(yùn)行速度更快。
在理想情況下,我們希望新生成的程序P'在整個(gè)輸入空間中都與原程序P功能等價(jià)。但這個(gè)屬性的驗(yàn)證在一般情況下是不可判定的。因此,研究團(tuán)隊(duì)采用了一種實(shí)用的近似方法:使用有限的測(cè)試集T = {(xi, yi)}來(lái)驗(yàn)證程序的行為,其中每個(gè)輸入-輸出對(duì)(xi, yi)都捕捉了程序C預(yù)期的行為。
一個(gè)匯編程序P'被認(rèn)為是有效的,如果它能成功地組裝和鏈接成可執(zhí)行二進(jìn)制文件。研究團(tuán)隊(duì)用valid(P') ∈ {True, False}來(lái)表示這個(gè)屬性。而正確程序的集合則被定義為:
S(P) = {P' | valid(P') ∧ ?(xi, yi) ∈ T, P'(xi) = yi}
這表示所有既能成功編譯又能通過(guò)所有測(cè)試用例的程序集合。
對(duì)于性能評(píng)估,研究團(tuán)隊(duì)測(cè)量了程序P和P'在測(cè)試集T上的執(zhí)行時(shí)間,分別記為t(P)和t(P')。P'相對(duì)于P的加速比被定義為:
Speedup(P') = t(P) / t(P'),如果P'∈S(P)且t(P') < t(P) 1,其他情況
這意味著只有當(dāng)新程序正確且比原程序快時(shí),才會(huì)計(jì)算實(shí)際的加速比;否則,加速比默認(rèn)為1。
優(yōu)化目標(biāo)是生成一個(gè)候選程序P',使其加速比Speedup(P')最大化。只有S(P)中的程序才有資格獲得加速;任何無(wú)法編譯成二進(jìn)制文件或產(chǎn)生錯(cuò)誤輸出的候選程序都被賦予默認(rèn)加速比1。這反映了一種實(shí)用的回退策略:當(dāng)生成的程序無(wú)效時(shí),系統(tǒng)可以退回到基準(zhǔn)P(由gcc -O3編譯),從而確保至少獲得1倍的參考性能。
二、數(shù)據(jù)集構(gòu)建與研究方法
要訓(xùn)練一個(gè)能夠優(yōu)化匯編代碼的模型,首先需要高質(zhì)量的數(shù)據(jù)。研究團(tuán)隊(duì)利用CodeNet,這個(gè)包含大量競(jìng)爭(zhēng)性編程提交的龐大語(yǔ)料庫(kù),構(gòu)建了自己的數(shù)據(jù)集。就像建造一座房子需要優(yōu)質(zhì)的建材一樣,構(gòu)建良好的機(jī)器學(xué)習(xí)模型同樣需要精心準(zhǔn)備的數(shù)據(jù)。
研究團(tuán)隊(duì)的數(shù)據(jù)集由三部分組成:原始C源代碼(C)、使用gcc -O3優(yōu)化級(jí)別編譯生成的對(duì)應(yīng)x86-64匯編代碼(P),以及測(cè)試集(T)。這就像是給模型提供了一個(gè)"菜譜"(C源碼)、一個(gè)"初始成品"(gcc生成的匯編),以及一套"品鑒標(biāo)準(zhǔn)"(測(cè)試集),讓模型學(xué)習(xí)如何在保持食物原味(功能正確性)的前提下,使烹飪過(guò)程更加高效(代碼更快)。
由于CodeNet包含超過(guò)800萬(wàn)個(gè)C和C++提交,研究團(tuán)隊(duì)無(wú)法全部使用。他們采用了一種聰明的抽樣策略:選擇那些從gcc -O0(無(wú)優(yōu)化)到gcc -O3(最高優(yōu)化)能獲得最高相對(duì)加速比的程序。這種策略有兩個(gè)好處:一是傾向于選擇含有復(fù)雜邏輯的程序,這些程序在-O0下表現(xiàn)不佳,但能被-O3有效優(yōu)化;二是創(chuàng)造了更具挑戰(zhàn)性的環(huán)境,因?yàn)榛鶞?zhǔn)代碼已經(jīng)經(jīng)過(guò)編譯器的積極優(yōu)化。
最終的數(shù)據(jù)集包含7,872個(gè)訓(xùn)練程序和200個(gè)保留用于評(píng)估的程序。這些程序平均包含約22行C代碼和130行匯編代碼,每個(gè)程序配有約9個(gè)測(cè)試用例。
接下來(lái),研究團(tuán)隊(duì)采用強(qiáng)化學(xué)習(xí)方法來(lái)優(yōu)化大語(yǔ)言模型。他們將任務(wù)概念化為一個(gè)標(biāo)準(zhǔn)的上下文多臂賭博機(jī)問(wèn)題,由上下文空間S、動(dòng)作空間A和獎(jiǎng)勵(lì)函數(shù)r : S × A → R組成。
想象你在玩一個(gè)賭博機(jī)游戲,但每次拉動(dòng)賭博機(jī)的手柄前,都會(huì)看到一些背景信息(上下文)。在這里,上下文s ∈ S代表一個(gè)問(wèn)題實(shí)例,包括源程序C、基線匯編P和相關(guān)測(cè)試用例T。而動(dòng)作a ∈ A對(duì)應(yīng)于生成候選匯編程序P~。獎(jiǎng)勵(lì)函數(shù)r(s, a)根據(jù)生成程序的正確性和性能評(píng)估其質(zhì)量。
研究團(tuán)隊(duì)使用近端策略優(yōu)化(PPO)來(lái)訓(xùn)練模型。PPO是一種一階策略梯度算法,通過(guò)約束每次策略更新與前一個(gè)保持接近,從而穩(wěn)定訓(xùn)練過(guò)程。具體來(lái)說(shuō),PPO最大化形式為Es,a[min(ρ(θ)A, clip(ρ(θ), 1 - ε, 1 + ε)A)]的裁剪替代目標(biāo),其中ρ(θ) = πθ(a | s)/πθold(a | s)是當(dāng)前策略與先前策略之間的概率比率,A是動(dòng)作a在狀態(tài)s中的估計(jì)優(yōu)勢(shì),ε是限制策略更新到小信任區(qū)域的裁剪系數(shù)。
研究團(tuán)隊(duì)設(shè)計(jì)了兩種不同的獎(jiǎng)勵(lì)函數(shù)變體來(lái)指導(dǎo)模型學(xué)習(xí)??梢詫ⅹ?jiǎng)勵(lì)函數(shù)想象成"教練"的反饋,告訴模型它的生成效果如何。
第一種是"正確性引導(dǎo)的加速比"(CGS),其定義為:
r(s, a) = -1,如果P~編譯失敗 pass(s, a),如果某些測(cè)試失敗 1 + α · speedup(s, a),如果所有測(cè)試通過(guò)
其中,pass(s, a)表示通過(guò)的測(cè)試用例比例,speedup(s, a)表示相對(duì)于基線P的加速比,α是一個(gè)控制全部正確情況下加速比相對(duì)重要性的常數(shù)。
第二種是"僅加速比"(SO),其定義為:
r(s, a) = 0,如果P~編譯失敗或任何測(cè)試失敗 speedup(s, a),其他情況
CGS獎(jiǎng)勵(lì)函數(shù)提供了密集的信號(hào),即使在最終目標(biāo)未達(dá)成時(shí)也能指導(dǎo)策略。它就像是在學(xué)習(xí)烹飪過(guò)程中,教練不僅關(guān)注最終菜肴的口感,還會(huì)對(duì)準(zhǔn)備食材、火候控制等中間步驟給予反饋。相比之下,SO定義了一個(gè)更直接、更稀疏的目標(biāo),只在程序既正確又高效時(shí)才給予非零獎(jiǎng)勵(lì),類似于教練只關(guān)注最終菜肴的質(zhì)量,不給中間過(guò)程任何反饋。
三、實(shí)驗(yàn)設(shè)置與評(píng)估方法
為了全面評(píng)估大語(yǔ)言模型優(yōu)化匯編代碼的能力,研究團(tuán)隊(duì)設(shè)計(jì)了一套嚴(yán)謹(jǐn)?shù)膶?shí)驗(yàn)方案。就像科學(xué)家測(cè)試新藥效果需要精確的實(shí)驗(yàn)設(shè)計(jì)一樣,評(píng)估AI模型的性能同樣需要周密的規(guī)劃。
首先,研究團(tuán)隊(duì)為每個(gè)實(shí)例構(gòu)建了一個(gè)包含原始C程序和使用gcc -O3生成的匯編代碼的提示詞(prompt)。所有測(cè)試用例都對(duì)模型保密,這就像是給學(xué)生出題,但不提前告訴他們答案。模型被指示只生成優(yōu)化后的x86-64匯編代碼,不包含任何其他文本。
評(píng)估指標(biāo)包括正確性和性能兩個(gè)方面。編譯通過(guò)率(Compile pass)是生成的匯編能成功編譯為二進(jìn)制可執(zhí)行文件的問(wèn)題百分比。測(cè)試通過(guò)率(Test pass)是編譯后的代碼通過(guò)所有測(cè)試用例的問(wèn)題百分比。對(duì)于性能,研究團(tuán)隊(duì)測(cè)量了相對(duì)于gcc -O3基線的加速比。如前所述,任何無(wú)法編譯、測(cè)試失敗或比基線慢的候選程序都被賦予默認(rèn)加速比1倍。這反映了實(shí)際應(yīng)用中的情況:當(dāng)新方法不起作用時(shí),系統(tǒng)可以回退到gcc -O3輸出,不會(huì)造成性能損失。為了捕捉分布行為,研究團(tuán)隊(duì)報(bào)告了加速比的25、50(中位數(shù))和75百分位數(shù),以及整個(gè)評(píng)估集的平均加速比。
研究團(tuán)隊(duì)評(píng)估了21個(gè)最先進(jìn)的語(yǔ)言模型,涵蓋了多種架構(gòu)。他們的評(píng)估包括頂尖的專有模型,如gpt-4o、o4-mini、gemini-2.0-flash-001和claude-3.7-sonnet,以及開(kāi)源模型家族,如Llama、DeepSeek和Qwen。此外,他們還評(píng)估了基于DeepSeek-R1蒸餾的Qwen和Llama模型,以及基于Code Llama并專為編譯器相關(guān)任務(wù)設(shè)計(jì)的最新編譯器基礎(chǔ)模型。所有開(kāi)源模型都經(jīng)過(guò)指令微調(diào)。
為了確保性能評(píng)估的準(zhǔn)確性,研究團(tuán)隊(duì)使用了hyperfine,這是一個(gè)基準(zhǔn)測(cè)試工具,通過(guò)執(zhí)行預(yù)熱運(yùn)行和多次計(jì)時(shí)執(zhí)行來(lái)減少測(cè)量噪聲。對(duì)于每個(gè)程序的執(zhí)行,他們丟棄前三次運(yùn)行,并報(bào)告接下來(lái)十次運(yùn)行的平均運(yùn)行時(shí)間。
實(shí)驗(yàn)是在配備四塊A100 GPU的單個(gè)節(jié)點(diǎn)上進(jìn)行的。在所有評(píng)估模型中,他們選擇Qwen2.5-Coder-7B-Instruct進(jìn)行訓(xùn)練,原因是它表現(xiàn)出最強(qiáng)的正確性結(jié)果,并且性能還有很大的提升空間。他們有意避免使用特定于編譯器的基礎(chǔ)模型,以保持通用性。
四、實(shí)驗(yàn)結(jié)果與分析
經(jīng)過(guò)嚴(yán)謹(jǐn)?shù)膶?shí)驗(yàn)設(shè)計(jì),研究團(tuán)隊(duì)得到了一系列令人振奮的結(jié)果。就像美食評(píng)論家會(huì)從多個(gè)維度評(píng)價(jià)一道菜品一樣,研究團(tuán)隊(duì)也從多個(gè)角度分析了各個(gè)模型的表現(xiàn)。
從表2可以看出,大多數(shù)模型在生成高性能匯編代碼方面面臨挑戰(zhàn):大部分只能達(dá)到1.00倍的加速比,編譯通過(guò)率和測(cè)試通過(guò)率較低。在基線模型中,claude-3.7-sonnet和DeepSeek-V3表現(xiàn)最佳,測(cè)試通過(guò)率超過(guò)40%,平均加速比分別達(dá)到1.22倍和1.21倍。值得注意的是,一些模型如DeepSeek-R1完全無(wú)法生成有效的匯編,而o4-mini的測(cè)試通過(guò)率僅為4.5%。這些結(jié)果凸顯了任務(wù)的難度,也說(shuō)明了需要針對(duì)性方法的必要性。
編譯器基礎(chǔ)模型(以llm-compiler-為前綴)是在匯編代碼和編譯器中間表示上預(yù)訓(xùn)練的。其中,llm-compiler-13b在正確性和加速比方面都表現(xiàn)出較強(qiáng)的性能。相比之下,經(jīng)過(guò)微調(diào)的變體(-ftd)表現(xiàn)不佳,可能是因?yàn)樗鼈冞m應(yīng)了將x86-64和ARM匯編反匯編為L(zhǎng)LVM-IR等任務(wù),而非優(yōu)化匯編代碼以提高執(zhí)行性能。
研究團(tuán)隊(duì)選擇Qwen2.5-Coder-7B-Instruct作為強(qiáng)化學(xué)習(xí)訓(xùn)練的起點(diǎn),因?yàn)樗哂休^強(qiáng)的編譯通過(guò)率(79.0%)和最高的測(cè)試通過(guò)率(61.0%)。經(jīng)過(guò)PPO微調(diào)后,該模型在兩項(xiàng)指標(biāo)上都達(dá)到了96.0%,并將平均加速比從1.10倍提高到1.47倍。值得注意的是,它是唯一一個(gè)在25百分位上展示出明顯加速的模型,并且在所有評(píng)估指標(biāo)上都優(yōu)于其他所有模型,包括正確性、平均加速比和加速比百分位數(shù)。
研究團(tuán)隊(duì)還對(duì)獎(jiǎng)勵(lì)函數(shù)設(shè)計(jì)進(jìn)行了深入分析。他們?cè)u(píng)估了兩種獎(jiǎng)勵(lì)設(shè)計(jì):正確性引導(dǎo)的加速比(CGS)和僅加速比(SO)。如表3所示,兩種變體都實(shí)現(xiàn)了較高的編譯通過(guò)率和測(cè)試通過(guò)率,但SO產(chǎn)生了更好的性能。去除中間的塑形信號(hào)似乎有助于模型專注于終端目標(biāo)。這就像是學(xué)習(xí)一項(xiàng)復(fù)雜技能時(shí),有時(shí)直接針對(duì)最終目標(biāo)練習(xí),比分解成多個(gè)簡(jiǎn)單步驟學(xué)習(xí)更有效。研究團(tuán)隊(duì)還嘗試了不同的CGS縮放因子α(5或10),發(fā)現(xiàn)它對(duì)結(jié)果影響不大。
這些結(jié)果表明,稀疏的、終端的獎(jiǎng)勵(lì)(SO)在這種情況下更有效。由于基礎(chǔ)模型已經(jīng)達(dá)到61.0%的測(cè)試通過(guò)率,正確性不是瓶頸;直接優(yōu)化加速比提供了更強(qiáng)的訓(xùn)練信號(hào)。
研究團(tuán)隊(duì)還進(jìn)行了一項(xiàng)關(guān)鍵的消融研究:大語(yǔ)言模型是否能直接從C代碼編譯出高性能匯編,而不依賴編譯器生成的基線匯編?為了調(diào)查這個(gè)問(wèn)題,他們比較了兩種評(píng)估設(shè)置:(1)提供C源代碼和gcc -O3匯編(默認(rèn),表4中的"w/ O3"),(2)只提供C源代碼("w/o O3")。
表4顯示,移除基線匯編導(dǎo)致性能嚴(yán)重下降。例如,Qwen2.5-Coder-7B-PPO從96.0%的正確性和1.47倍的加速比降至0.0%和1.00倍。即使是強(qiáng)大的模型如Claude-3.7-sonnet也出現(xiàn)了顯著下降。
這些結(jié)果表明,當(dāng)前大語(yǔ)言模型直接從C編譯到優(yōu)化匯編的能力仍然有限。編譯器輸出為大語(yǔ)言模型提供了可靠的參考。這支持了研究框架的設(shè)計(jì):使用gcc -O3作為強(qiáng)化學(xué)習(xí)的有效起點(diǎn)。雖然未來(lái)的工作可能會(huì)探索直接從C生成,但由于缺乏編譯器指導(dǎo),這可能會(huì)更加具有挑戰(zhàn)性。
五、案例分析與實(shí)際應(yīng)用
為了更直觀地理解大語(yǔ)言模型如何優(yōu)化匯編代碼,研究團(tuán)隊(duì)展示了一個(gè)代表性例子,如圖2所示。這個(gè)例子清晰地展示了語(yǔ)言模型如何發(fā)現(xiàn)比先進(jìn)編譯器更高效的優(yōu)化方案。
原始C函數(shù)計(jì)算"人口計(jì)數(shù)"(也稱為位計(jì)數(shù),即計(jì)算一個(gè)數(shù)二進(jìn)制表示中有多少個(gè)1)。這個(gè)函數(shù)通過(guò)重復(fù)移位輸入并累加其最低有效位來(lái)計(jì)算結(jié)果。想象一下,這就像是你手動(dòng)數(shù)一串燈泡中有多少個(gè)是亮著的,一個(gè)一個(gè)地檢查。
gcc -O3生成的匯編代碼保留了這個(gè)循環(huán)結(jié)構(gòu),依賴于顯式的位操作和條件分支來(lái)計(jì)算結(jié)果。這就像是編譯器按部就班地遵循了C代碼的邏輯,雖然做了一些基本優(yōu)化,但基本思路沒(méi)變。
而大語(yǔ)言模型生成的代碼則顯著不同:它用一條popcnt指令替換了整個(gè)循環(huán)。這條指令是現(xiàn)代x86-64架構(gòu)支持的,能在一次操作中執(zhí)行相同的計(jì)算,從而顯著減少了指令數(shù)量和運(yùn)行時(shí)開(kāi)銷。這就像是發(fā)現(xiàn)了一個(gè)專用的計(jì)數(shù)器,可以立即告訴你有多少燈泡是亮的,而不必一個(gè)一個(gè)地檢查。
這種轉(zhuǎn)換超出了gcc -O3的能力范圍,因?yàn)榫幾g器應(yīng)用的是預(yù)設(shè)的基于規(guī)則的優(yōu)化傳遞序列,而不進(jìn)行這種語(yǔ)義級(jí)別的重寫。大語(yǔ)言模型能夠合成功能等價(jià)的代碼,利用編譯器未使用的硬件級(jí)指令。這個(gè)例子展示了語(yǔ)言模型通過(guò)探索更廣泛的語(yǔ)義保留程序轉(zhuǎn)換空間來(lái)優(yōu)化匯編的潛力。
這種優(yōu)化能力在實(shí)際應(yīng)用中有著廣泛的潛在價(jià)值。在性能敏感的領(lǐng)域,如高頻交易、實(shí)時(shí)圖像處理或游戲引擎,即使是微小的性能提升也能帶來(lái)顯著的實(shí)際好處。例如,在處理大量數(shù)據(jù)的服務(wù)器應(yīng)用中,1.47倍的平均加速可以直接轉(zhuǎn)化為能源成本的節(jié)約和服務(wù)容量的提升。
此外,這種方法還可以應(yīng)用于資源受限的環(huán)境,如嵌入式系統(tǒng)或移動(dòng)設(shè)備,在這些環(huán)境中,計(jì)算資源和電池壽命都是寶貴的。通過(guò)生成更高效的代碼,可以延長(zhǎng)設(shè)備使用時(shí)間或?qū)崿F(xiàn)更復(fù)雜的功能。
在教育方面,這項(xiàng)研究也提供了寶貴的見(jiàn)解。通過(guò)觀察大語(yǔ)言模型如何優(yōu)化代碼,開(kāi)發(fā)者可以學(xué)習(xí)到新的優(yōu)化技術(shù)和模式,這些可能不在傳統(tǒng)編譯器教科書中。就像從大師的棋譜中學(xué)習(xí)一樣,開(kāi)發(fā)者可以從AI生成的優(yōu)化中獲得啟發(fā),提升自己的編程技能。
六、局限性與未來(lái)工作
盡管這項(xiàng)研究取得了令人矚目的成果,研究團(tuán)隊(duì)也坦誠(chéng)地討論了當(dāng)前方法的幾點(diǎn)局限性。就像任何工具都有其適用范圍一樣,他們的方法也面臨一些挑戰(zhàn)。
一個(gè)關(guān)鍵的局限是缺乏形式化的正確性保證。雖然研究團(tuán)隊(duì)通過(guò)輸入-輸出測(cè)試用例驗(yàn)證生成的程序,但這種測(cè)試本質(zhì)上是不完整的,可能會(huì)忽略邊緣情況。就像用幾個(gè)樣本測(cè)試一道菜的口味,無(wú)法保證在所有情況下都美味一樣,測(cè)試無(wú)法涵蓋所有可能的輸入。因此,與Stoke等完全驗(yàn)證的系統(tǒng)不同,大語(yǔ)言模型生成的匯編可能會(huì)在某些情況下產(chǎn)生錯(cuò)誤結(jié)果或表現(xiàn)出未定義行為。這一局限反映了編程語(yǔ)言領(lǐng)域的一個(gè)更廣泛的挑戰(zhàn):在一般情況下,驗(yàn)證兩個(gè)任意程序之間的語(yǔ)義等價(jià)性是不可判定的問(wèn)題。
另一個(gè)局限是在實(shí)際硬件上測(cè)量性能的固有隨機(jī)性。盡管研究團(tuán)隊(duì)通過(guò)重復(fù)測(cè)量來(lái)減少噪聲,但低級(jí)硬件波動(dòng)仍可能導(dǎo)致加速比估計(jì)出現(xiàn)變異。這種不確定性在現(xiàn)實(shí)環(huán)境中很難完全消除。雖然前人工作采用了基于模擬器的評(píng)估,但模擬器可能無(wú)法忠實(shí)捕捉實(shí)際硬件性能。
最后,觀察到的性能提升可能無(wú)法跨機(jī)器泛化。模型可能隱式學(xué)習(xí)并利用特定硬件特性,如緩存大小。因此,在一臺(tái)機(jī)器上訓(xùn)練的模型在部署到不同機(jī)器時(shí)可能無(wú)法保持其有效性。這就像一道適合特定烹飪?cè)O(shè)備的食譜,在使用不同設(shè)備時(shí)可能需要調(diào)整。
展望未來(lái),研究團(tuán)隊(duì)提出了幾個(gè)有前途的研究方向。首先,雖然他們使用了近端策略優(yōu)化(PPO),未來(lái)可以探索替代的強(qiáng)化學(xué)習(xí)算法,如GRPO。其次,擴(kuò)展到更大、更多樣化的數(shù)據(jù)集,特別是涉及競(jìng)爭(zhēng)性編程之外的性能關(guān)鍵代碼,將使設(shè)置更加現(xiàn)實(shí)和適用。第三,結(jié)合強(qiáng)化學(xué)習(xí)和監(jiān)督微調(diào)可能會(huì)帶來(lái)額外收益,盡管目前尚不清楚在gcc -O3輸出上進(jìn)行訓(xùn)練是否會(huì)提供額外價(jià)值。
另一個(gè)有趣的方向是融入交互式改進(jìn)循環(huán),模型可以使用錯(cuò)誤或性能測(cè)量的反饋迭代更新其輸出。最后,將這種方法從x86-64擴(kuò)展到其他架構(gòu),如MIPS、ARM或GPU編程,可以擴(kuò)大其適用性和影響力。
七、結(jié)論與總結(jié)
本研究探索了使用大語(yǔ)言模型優(yōu)化匯編代碼的潛力,這是一個(gè)能夠通過(guò)精細(xì)控制執(zhí)行過(guò)程實(shí)現(xiàn)性能提升的領(lǐng)域,而這些優(yōu)化在高級(jí)語(yǔ)言中難以表達(dá)。傳統(tǒng)編譯器依賴固定的基于規(guī)則的轉(zhuǎn)換,但由于優(yōu)化空間的復(fù)雜性,它們?cè)谏勺顑?yōu)代碼方面面臨根本性挑戰(zhàn)。
為了解決這個(gè)問(wèn)題,研究團(tuán)隊(duì)?wèi)?yīng)用強(qiáng)化學(xué)習(xí)來(lái)微調(diào)大語(yǔ)言模型,使用近端策略優(yōu)化(PPO)和基于正確性和性能的獎(jiǎng)勵(lì)函數(shù)。為了支持這項(xiàng)研究,他們引入了一個(gè)包含8,072個(gè)真實(shí)世界C程序的基準(zhǔn),這些程序配有編譯器生成的基線匯編和測(cè)試用例。
經(jīng)過(guò)訓(xùn)練的模型Qwen2.5-Coder-7B-PPO在編譯通過(guò)率和測(cè)試通過(guò)率上都達(dá)到了96.0%,平均加速比達(dá)到1.47倍,優(yōu)于所有其他評(píng)估模型。消融研究表明,強(qiáng)調(diào)最終加速比而非中間正確性信號(hào)的獎(jiǎng)勵(lì)函數(shù)能夠更有效地指導(dǎo)訓(xùn)練。
這些結(jié)果表明,強(qiáng)化學(xué)習(xí)能夠釋放大語(yǔ)言模型作為匯編代碼性能的有效優(yōu)化器的潛力。通過(guò)學(xué)習(xí)識(shí)別和應(yīng)用編譯器可能錯(cuò)過(guò)的優(yōu)化機(jī)會(huì),經(jīng)過(guò)訓(xùn)練的模型能夠生成既正確又高效的代碼,為性能敏感的應(yīng)用提供了寶貴的工具。
雖然仍存在一些局限,如缺乏形式化正確性保證和性能測(cè)量的固有隨機(jī)性,但這項(xiàng)研究為未來(lái)探索打開(kāi)了新的可能性。隨著這一領(lǐng)域的發(fā)展,我們可以期待大語(yǔ)言模型在代碼優(yōu)化方面發(fā)揮越來(lái)越重要的作用,與傳統(tǒng)編譯器形成互補(bǔ),共同推動(dòng)軟件性能的邊界。
在這個(gè)計(jì)算資源日益珍貴的時(shí)代,能夠自動(dòng)生成更高效的代碼不僅具有學(xué)術(shù)價(jià)值,更有著廣泛的實(shí)際應(yīng)用前景。從高性能計(jì)算到資源受限的嵌入式系統(tǒng),這種技術(shù)都可能帶來(lái)顯著的效益,使軟件不僅能夠完成任務(wù),還能以最高效的方式完成。
好文章,需要你的鼓勵(lì)
這項(xiàng)研究提出了"高效探測(cè)"方法,解決了掩碼圖像建模AI難以有效評(píng)估的問(wèn)題。通過(guò)創(chuàng)新的多查詢交叉注意力機(jī)制,該方法在減少90%參數(shù)的同時(shí)實(shí)現(xiàn)10倍速度提升,在七個(gè)基準(zhǔn)測(cè)試中均超越傳統(tǒng)方法。研究還發(fā)現(xiàn)注意力質(zhì)量與分類性能的強(qiáng)相關(guān)性,生成可解釋的注意力圖譜,展現(xiàn)出優(yōu)異的跨域適應(yīng)性。團(tuán)隊(duì)承諾開(kāi)源全部代碼,推動(dòng)技術(shù)普及應(yīng)用。
伊利諾伊大學(xué)研究團(tuán)隊(duì)開(kāi)發(fā)了CLAIMSPECT系統(tǒng),通過(guò)層次化分解復(fù)雜爭(zhēng)議、智能檢索相關(guān)文獻(xiàn)、多角度收集觀點(diǎn)的方法,將傳統(tǒng)的"真假"判斷轉(zhuǎn)變?yōu)槎嗑S度分析。該系統(tǒng)能夠自動(dòng)構(gòu)建爭(zhēng)議話題的分析框架,識(shí)別不同觀點(diǎn)及其支撐證據(jù),為科學(xué)和政治爭(zhēng)議提供更全面客觀的分析,已在生物醫(yī)學(xué)和國(guó)際關(guān)系領(lǐng)域驗(yàn)證有效性。
清華大學(xué)研究團(tuán)隊(duì)首次提出情感認(rèn)知融合網(wǎng)絡(luò)(ECFN),讓AI能像人類一樣理解和表達(dá)情感。該系統(tǒng)通過(guò)多層次情感處理架構(gòu),在情感識(shí)別準(zhǔn)確率上比現(xiàn)有最佳系統(tǒng)提升32%,情感表達(dá)自然度提升45%。研究突破了傳統(tǒng)AI情感理解的局限,實(shí)現(xiàn)了跨模態(tài)情感融合、動(dòng)態(tài)情感追蹤和個(gè)性化情感建模,為醫(yī)療、教育、客服等領(lǐng)域帶來(lái)革命性應(yīng)用前景。
哈佛大學(xué)研究團(tuán)隊(duì)通過(guò)創(chuàng)新的多智能體強(qiáng)化學(xué)習(xí)方法,讓AI在戰(zhàn)略游戲中學(xué)會(huì)復(fù)雜推理。研究發(fā)現(xiàn)AI通過(guò)游戲競(jìng)爭(zhēng)能發(fā)展出類人思維能力,在邏輯推理、創(chuàng)造性解決問(wèn)題等方面表現(xiàn)顯著提升。這項(xiàng)突破性成果為未來(lái)AI在醫(yī)療、教育、城市管理等領(lǐng)域的應(yīng)用奠定基礎(chǔ),展現(xiàn)了通過(guò)模擬人類學(xué)習(xí)過(guò)程培養(yǎng)真正智能AI的新路徑。