编译 | 苏宓
出品 | 优快云(ID:优快云news)
在高性能计算动辄卷上 AI、大模型和 GPU 加速的今天,还有人在默默手写汇编代码,并且——赢了编译器。
开源且功能强大的音视频处理工具集 FFmpeg 的开发者最近又出手了。在他们刚刚提交的一个补丁中,通过手写汇编代码“手搓”了一段关键路径,成功让 FFmpeg 一个功能的性能得到大幅提升。据称,达到了“快 100 倍”的效果。
当然,开发人员随即也马上解释清楚:这不是整个 FFmpeg 都变快了,而是某个特定的功能模块,名为 rangedetect8_avx512,在应用了手动优化后获得了惊人的提速。
而即使你的设备并不支持新款 AVX512 指令集,使用 rangedetect8_avx2 版本的代码,也能感受到高达 64% 的性能提升。
迄今为止,只有一个函数享受了如此极端的速度提升
很多人可能会好奇,汇编语言不是早就没人用了么?
其实不然。
FFmpeg 就是少数仍在广泛使用汇编代码的“忠实用户”之一。他们坚持在性能瓶颈处用汇编“手搓优化”,效果往往比现代编译器自动生成的指令更高效,甚至“拉开好几个数量级”。
这一点在他们的实际成果中体现得淋漓尽致。2023 年 11 月,FFmpeg 项目曾有一次类似的性能突破,当时某些操作速度提高了 94 倍。
而这次的新补丁,更是把 rangedetect8 这一功能的处理速度提升到一个新的高度。
简单来看,rangedetect8 是 FFmpeg 中的一个视频过滤器(filter),用于对图像中的像素值进行“范围检测”。
虽然这个过滤器是“一个不太常用的功能”,但它是 SIMD(单指令多数据) 指令的绝佳测试场。手写汇编的方式,能更精准地控制 CPU 的指令执行方式和寄存器调度,大幅提升并行处理效率。这些,恰恰是编译器目前还很难做到的。
正因此,FFmpeg 在项目推文中对现代编译器提出了直言不讳的批评——“编译器的寄存器分配器太拉垮了。”
寄存器的调度和分配,是性能优化中的关键一环。而现代 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
推荐阅读:
旧手机先别扔!花不到70元,10年前旧手机「秒变」数据中心:下海识鱼8小时都没掉线
44万美元!马斯克重金悬赏“AI女友”开发者,网友:让我来
2025 全球产品经理大会
8月15–16日·北京威斯汀酒店
互联网大厂&AI 创业公司产品人齐聚
12 大专题,趋势洞察 × 实战拆解
扫码领取大会 PPT,抢占 AI 产品新红利