x264优化(字节跳动钱佳炎剖析 x264 于 RISCV 生态的构建及优化路径)

x264优化(字节跳动钱佳炎剖析 x264 于 RISCV 生态的构建及优化路径)

admin 2025-10-23 社会资讯 82 次浏览 0个评论

7月18日,在“第五届RISC-V中国峰会”上,字节跳动服务器团队软件工程师钱佳炎就 x264 在 RISC-V 生态中的构建与优化工作展开分享,并针对指令集瓶颈以及软件生态所面临的挑战进行了深度剖析。

在多媒体编码领域,X264 作为一款极具代表性的开源编码器,其代码仓库构建了一套完整且核心的编码器流程,全部采用 C 代码编写,涵盖了编码器策略的关键部分以及一系列基于编码器协议且具备通用扩展性的核心算法。这些算法针对不同架构如 X86、ARM 等都有特定实现。然而,随着 RISC-V 架构的兴起,如何让 X264 在 RISC-V 上达到与其他架构相当的性能,成为了一个亟待解决的重要问题,而指令集优化则是其中的关键环节。

字节跳动钱佳炎:剖析 x264 于 RISC-V 生态的构建及优化路径

X264 底层绝大多数算子的计算模式具有相似性。以处理图像块为例,通常面对的是 720P 规格的较大图像块,处理时会从中选取尺寸在 4×4 到 16×16 之间的小矩阵,主要涉及每一行的数据。由于 CPU 无法一次性完成不连续内存请求,在传统的 X86 和 ARM CPU 上,高并发的窄向量实现方式更为适用。这种特性使得 ARM 架构在编码器领域通常能展现出更好的性能,而 X86 架构的表现则相对欠佳。

与 X86 和 ARM 架构不同,RISC-V 架构在指令集方面存在一些瓶颈,这给 X264 的优化带来了诸多困难。目前,对 RISC-V 架构的优化工作重点和难点在于大部分内容需通过手写汇编完成,工作量巨大,同时还有一小部分涉及注册函数机制的工作需要深入探索合适的实现方式。

“in - register transpose”(寄存器内转置)操作是将数据从行布局转换为列布局。现有实现依赖“trn1/trn2”指令组合,时间复杂度为 O(nlogn),但目前并没有能与 ARM 架构相媲美的优化方案。这使得在 RISC-V 架构上进行该操作时,性能受到较大限制,无法充分发挥其潜力。

“absolute difference”(绝对差值)的计算在编码过程中是一个常见且重要的操作。然而,当前在 RISC-V 架构上,该计算需要四条指令才能实现,这在一定程度上限制了性能的提升。相比之下,其他架构可能有更高效的实现方式,这使得 RISC-V 在编码效率上处于劣势。

除了上述两个主要问题外,还存在一些其他问题,例如“Signed saturate and Narrow to Unsigned”(有符号饱和并窄化至无符号)操作。这或许与 RISC - V 架构的某些设计理念或坚持有关。另外,在从标量向向量转换的过程中,由于标准规定与实际情况存在差异,需要额外的指令来执行清零操作,这无疑增加了指令开销和优化难度。

发现这些问题后,推动指令集的优化成为必然选择。在 RISE(RISC-V 软件生态相关组织或活动)提出问题,并收集更多生态开发者的反馈是优化工作的重要一步。通过广泛收集反馈,可以了解开发者在实际使用中遇到的问题和需求,为优化工作提供更明确的方向。

当前社区对新扩展的要求呈现出实用主义的特点。它不追求逻辑上的完备,而是希望新扩展对应用集具有明确的价值和收益。具体来说,不仅在指令的功能上要尽量最小化,避免引入不必要的复杂功能,在向量的变体上和数据类型上也要求最小化。这种要求有助于提高指令集的效率和实用性,减少不必要的资源浪费,同时也为优化工作提供了更具体的目标。

转载请注明来自海坡下载,本文标题:《x264优化(字节跳动钱佳炎剖析 x264 于 RISCV 生态的构建及优化路径)》

每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,82人围观)参与讨论

还没有评论,来说两句吧...