編譯 | 蘇宓
出品 | CSDN(ID:CSDNnews)
在高性能計算動輒卷上 AI、大模型和 GPU 加速的今天,還有人在默默手寫匯編代碼,并且——贏了編譯器。
開源且功能強大的音視頻處理工具集 FFmpeg 的開發者最近又出手了。在他們剛剛提交的一個補丁中,通過手寫匯編代碼“手搓”了一段關鍵路徑,成功讓 FFmpeg 一個功能的性能得到大幅提升。據稱,達到了“快 100 倍”的效果。
當然,開發人員隨即也馬上解釋清楚:這不是整個 FFmpeg 都變快了,而是某個特定的功能模塊,名為 rangedetect8_avx512,在應用了手動優化后獲得了驚人的提速。
而即使你的設備并不支持新款 AVX512 指令集,使用 rangedetect8_avx2 版本的代碼,也能感受到高達64% 的性能提升。
迄今為止,只有一個函數享受了如此極端的速度提升
很多人可能會好奇,匯編語言不是早就沒人用了么?
其實不然。
FFmpeg 就是少數仍在廣泛使用匯編代碼的“忠實用戶”之一。他們堅持在性能瓶頸處用匯編“手搓優化”,效果往往比現代編譯器自動生成的指令更高效,甚至“拉開好幾個數量級”。
這一點在他們的實際成果中體現得淋漓盡致。2023 年 11 月,FFmpeg 項目曾有一次類似的性能突破,當時某些操作速度提高了94 倍。
而這次的新補丁,更是把 rangedetect8 這一功能的處理速度提升到一個新的高度。
簡單來看,rangedetect8 是 FFmpeg 中的一個視頻過濾器(filter),用于對圖像中的像素值進行“范圍檢測”。
雖然這個過濾器是“一個不太常用的功能”,但它是 SIMD(單指令多數據) 指令的絕佳測試場。手寫匯編的方式,能更精準地控制 CPU 的指令執行方式和寄存器調度,大幅提升并行處理效率。這些,恰恰是編譯器目前還很難做到的。
正因此,FFmpeg 在項目推文中對現代編譯器提出了直言不諱的批評——“編譯器的寄存器分配器太拉垮了?!?/p>
寄存器的調度和分配,是性能優化中的關鍵一環。而現代 C/C++ 編譯器雖然足夠智能,但在一些對極致性能要求苛刻的場合,手寫匯編依然能拉出一大截差距。
這也是為什么一些高級性能工具,比如數據庫引擎、視頻轉碼器、圖像處理庫,至今還保留了手寫匯編路徑,作為“性能保底”的手段。
為什么還有人寫匯編?
回溯到 1980–1990 年代家用計算機的黃金時期,硬件能力有限,內存、CPU資源稀缺,程序員幾乎只能靠“榨干每一個指令周期”來提升性能。那時候寫匯編,不是情懷,而是生存需要。
而如今,即使資源已經極大豐富,但在某些對性能極度敏感的場景,比如:
嵌入式設備和硬件驅動
操作系統和編譯器內核
安全研究與逆向工程
高性能計算(HPC)、視頻處理
匯編依然是無法替代的“終極語言”。FFmpeg 項目的開發人員甚至還為此成立了“匯編優化學校”,鼓勵更多開發者學習、傳承這項古老而實用的技藝。
那么,你對手寫匯編怎么看?在這個 AI 自動生成代碼、LLM 自動補齊的時代,它還值得學習嗎?
參考:
https://www.tomshardware.com/software/the-biggest-speedup-ive-seen-so-far-ffmpeg-devs-boast-of-another-100x-leap-thanks-to-handwritten-assembly-code
2025 全球產品經理大會
8月15–16日·北京威斯汀酒店
互聯網大廠&AI 創業公司產品人齊聚
12 大專題,趨勢洞察 × 實戰拆解
掃碼領取大會 PPT,搶占 AI 產品新紅利
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.