Skip to content

x265性能优化

(一)2.2倍性能提升!砺睿微推动RISC-V架构与x265适配

随着互联网技术的迅猛发展以及智能终端设备的广泛普及,视频已成为用户获取信息、进行娱乐活动的重要媒介形式。支撑海量视频服务的背后,是x日益增长的服务器带宽消耗与存储成本,这已成为互联网企业亟需应对的重大挑战。

在此背景下,视频编码技术是降低带宽压力与存储开销的关键手段。以一段时长为10秒、分辨率为1920×1080、帧率为50帧/秒的视频文件 crowd_run_1080p50.y4m 为例,其未压缩原始数据量高达1.5GB;经由x265编码器压缩后,体积缩减至约18MB,压缩比超过80:1,显著降低了存储空间占用与网络传输成本。

目前,主流视频平台如爱奇艺、优酷、腾讯视频,短视频应用抖音、快手,以及微信等广泛涉及视频传输的互联网产品,均依赖高效的视频压缩技术实现内容分发。

视频编码场景相对封闭,是RISC-V架构服务器CPU最具潜力的应用落地场景之一。因此,推动视频编码技术在RISC-V平台上的深度优化,被视为该架构切入高性能服务器市场的重要突破口。砺睿微针对x265编码器中的核心算子函数,将其原有的C语言实现重构为基于RISC-V向量扩展(RVV)指令集的汇编实现,最终得到2.2倍编码性能提升。

x265 的重要性

在过去三十多年间,全球众多企业和研究机构投入大量人力与资金,持续推动视频编解码技术的发展,相继研发出多种高效编码方案,并逐步形成了多代具有广泛影响力的视频编解码标准。其中,由国际标准化组织ISO/IEC与国际电信联盟ITU联合制定的国际标准占据主导地位,代表性标准包括MPEG-2、H.263、H.264/AVC、H.265/HEVC以及最新的H.266/VVC。目前,H.264与H.265仍是市场主流编码标准。随着对带宽利用效率和压缩性能要求的不断提升,H.265正逐步取代H.264。在众多头部互联网企业及媒体平台中,H.265的部署比例已超过H.264,展现出显著的技术优势与应用前景。

x265是一款开源的H.265/HEVC视频编码器函数库,其核心目标是将原始视频或图像序列高效编码为符合H.265/HEVC标准的压缩比特流。凭借优异的压缩效率与持续的社区优化,x265已成为全球应用最广泛的HEVC编码器之一,广泛应用于点播、直播、视频转码及存储等场景。同时,它深度集成于FFmpeg、VLC等主流开源多媒体框架中,显著增强了这些平台在现代视频处理领域的技术能力与生态竞争力。

在 RISC-V 上重塑 x265 编码性能:从零适配到高效优化的生态突破

在项目初期,x265开源社区完全不支持RISC-V架构,甚至连最基本的编译和构建流程均无法通过。为解决这一问题,砺睿微首先向社区提交了功能适配相关的patch,成功实现了x265在RISC-V平台上的基础编译与运行能力,为后续性能优化奠定了基础。然而,由于当时RISC-V架构下缺乏任何针对核心算子函数的底层优化,初始性能表现远落后于主流架构。为此,我们系统性地开展了一系列深度优化工作,最终实现了整体编码性能提升2.2倍的成果。主要优化措施包括:

  1. 基于RVV 1.0与Zbb扩展的算子汇编优化:借鉴x86和ARM架构中已有的汇编优化实现方案,结合RISC-V向量扩展及位操作扩展的指令特性,对关键计算密集型算子函数进行重构,充分发挥RISC-V向量处理能力,显著提升SIMD并行效率。

  2. 兼容不同CPU同时达到最优性能:为确保兼容不同RISC-V处理器,在编译阶段根据编译器支持的指令扩展集自动选择对应的源文件;在运行时初始化阶段,通过CPU特性探测动态选择算子实现版本。该策略在保障跨平台兼容性的同时,实现了各硬件配置下的性能最优化。

  3. 转置等特殊场景的优化:针对缺少转置指令的情况,对比测试多种方案,最终选取基于vslideup、vslidedown和vmerge等向量指令的实现方案,是延迟最低、吞吐最优的组合方式,有效降低了关键路径的执行开销。

截至目前,砺睿微已在x265开源项目中累计提交并合入29个补丁,共计16,787行代码。当前社区中所有已合入的RISC-V相关代码均由砺睿微贡献,构成了x265对RISC-V架构支持的核心基础。砺睿微将陆续深入解析上述优化方案的设计思路、实现细节与性能评估结果,以推动RISC-V在高性能视频处理领域的生态建设与应用落地。

x265在RISC-V平台性能达ARM的85.6%:首阶段优化实现关键突破

测试命令如下

./x265 -o output_static.mkv ./Kimono_1920x1080_24.yuv --input-res 1920x1080 --fps 24 --preset faster --vbv-maxrate 2400 --vbv-bufsize 4800 --ref 1 --aq-mode 2 --aq-strength 1.2 --qcomp 0.8 --lookahead-threads 12 --ipratio 1.0 --bframes 3 --rc-lookahead 6 --crf 28 --keyint 60 --scenecut 0 --frames 80
fps ZF1(N2 核) 算能SG2044 CPU 算能2044/ZF1 ZF2 CPU ZF2 CPU/ZF1
开源gcc14.2 x265优化前 3.61 0.40 11.1% 1.41 39.1%
开源gcc14.2 x265优化后 3.61 1.19 33.0% 2.98 82.5%
自研gcc14 x265优化后 3.61 1.21 33.5% 3.09 85.6%

表中数据是使用同样的参数,编码同一个视频文件,然后对比其fps(Frames Per Second)数字。fps越高代表编码速度越快,即性能越好。

优化前后对比,在算能2044机器上从0.4提升到1.21,优化提升了3倍;在ZF2机器上从1.41提升到3.09,优化提升了2.2倍。

(二)转置 (Transpose) 操作的关键作用与 RISC-V 平台突破

在视频编码器性能优化中,编码速度、压缩率、画质等往往是大家关注的显性指标,但在实际工程实现中,转置 (Transpose) 这类基础高频的“幕后操作”,才是真正决定编码效率的关键。

对于业界主流的 x265 这类 H.265/HEVC 编码器,转置操作深度嵌入像数变换、SATD/SA8D 代价计算等核心算子,其效率直接决定了热点函数的执行速度,也决定了编码器在 CPU 微架构层面的优化空间。

砺睿微通过对 x265 编码器的深度软件优化,最终在 RISC-V 平台上达成了超过标量 C 实现 **4 倍多**的视频编码性能提升。

充分挖掘 RISC-V 向量扩展能力

视频编码存在海量图像块数据并行处理需求,适配 SIMD 并行计算架构,而该架构寄存器仅支持连续行数据运算,行列计算切换时必须通过转置操作重组数据,因此转置 (Transpose) 也是编码流程中不可或缺的重要操作。然而,RISC-V 向量扩展 (RVV 1.0) 目前缺少类似 ARM/x86 的专用转置指令。

砺睿微通过深度软件优化,充分挖掘 RVV 向量指令的组合能力,构建出多条高性能、低成本、可工程化的转置实现路径,在功能与效率上实现了优化突破。核心优化路径简洁高效:一是精选适配指令组合,依托最优指令搭配实现低开销、高吞吐的数据搬运;二是采用寄存器内直排模式,摒弃内存中转,降低运算延迟;三是联动编译器深度调度,拉高指令流水线与向量利用率,充分释放优化价值。

SATD 专项测试:超 4 倍性能跃升

转置操作的优化,最终要落地到编码器的核心热点函数上。为此,砺睿微针对深度依赖转置的 SATD (Sum of Absolute Transformed Difference) 函数进行优化,然后选取视频编码常用像素块尺寸(如 4x4、8x8、16x16 等)开展专项性能测试,测试结果如下:

SATD性能对比图

注: 本测试基于 x265 的 TestBench 框架开展,采用默认 8-bit 模式(即 HIGH_BIT_DEPTH=OFF)。

从测试结果可以看出,相比标量 C 实现,经 RVV 优化后的 SATD 函数在多场景下性能提升明显,尤其在大尺寸像素块(16x16 及以上)上增益更为突出,小尺寸块同样获得了稳定的加速效果。其中,最优场景(像素块尺寸 16x32)的性能突破达 4.32 倍,充分体现了 RVV 转置优化在高负载计算中的巨大潜力。

(三)提速!SA8D算子让RISC-V直面8K实时编码

在 x265、FFmpeg 等现代视频编码库中,针对 SA8D (8x8 Sum of Absolute Hadamard Transformed Differences) 算子的深度优化,有助于对4K/8K高分辨率视频实现更准确的码率控制——这正是当前视频云、直播转码等场景的核心痛点。 SA8D 被广泛用于帧内、帧间模式决策、运动估计等核心算法中,是码率控制精度的核心算子。如今,砺睿微在 RISC-V 平台上将这一算子的运行速度直接拉升到标量C实现的5倍以上,最优场景加速比高达5.41倍。

双轨并进:可移植性强、极致性能突破

以 x265 为代表的现代编码器为例,其核心算子的优化实现已形成明确的工程范式:以内联函数(intrinsic)为主流手段,在汇编级性能与代码可维护性之间建立平衡;以纯手工汇编(asm)为补充手段,针对热点路径进行调优,充分挖掘微架构潜力。RISC-V平台的原生向量扩展指令集 RVV(RISC-V Vector Extension)为这一场景提供了新的加速土壤。 因此,砺睿微在RISC-V架构下针对 SA8D 算子优化采用“双轨”策略:(1)RVV intrinsic 实现:充分发挥内联函数代码可读性高、可移植性强的优势,快速搭建起高性能的算子基础框架,为后续持续迭代提供了良好的代码基础;(2)RVV asm 实现:在 intrinsic 版本的基础上,通过寄存器重排、流水线并发等精巧调优,极致压榨向量性能,再度推高算子上限。 正是这种从通用优化到极致调优的双重打磨,让 SA8D 算子的效率实现了质的突破。

性能测试:5倍+跃升,最高5.41倍

砺睿微针对 SA8D 的 RVV intrinsic 实现、RVV asm 实现分别进行了性能测试,选取视频编码常用像素块尺寸(8×8、16×16、32×32等)来开展不同规模算子的性能测试,测试结果如下:

SA8D性能对比图

注: 本测试基于 x265 的 TestBench 框架开展,采用默认 8-bit 模式(即 HIGH_BIT_DEPTH=OFF)。

注:本测试基于 x265 的 TestBench 框架开展,采用默认 8-bit 模式(即 HIGH_BIT_DEPTH=OFF)。 从上图的测试结果可以看出,相比标量C实现,RVV intrinsic 实现在几乎所有场景中达到约3倍的性能突破,而RVV asm 实现更是在此基础上进一步拉升了性能天花板到5倍以上。其中,SA8D 算子最优场景(像素块尺寸32×32)的性能突破高达5.41倍。这意味着,在 4K/8K 超高清视频编码的实时模式决策中,SA8D 算子的耗时大幅缩短。尤其是在直播转码等对时延极为敏感的场景下,算子的极致性能直接转化为更低的编码延迟和更高的吞吐能力,让 RISC-V 平台具备支撑专业级实时视频处理的底气。

SA8D 的突破只是一个起点。未来,砺睿微计划将这一向量优化思路延伸至更大尺寸变换块的代价计算,以及 SATD、DCT 等同样依赖 Hadamard/整数变换的核心算子,逐步构建起一整套面向 RISC-V 的编码器优化算子库。 随着 RVV 指令集的持续演进,这套积累有望在 4K/8K 实时直播、高密度云转码等对吞吐与延迟极为苛刻的场景中,真正让 RISC-V 平台具备商业级竞争力。

(四)缺失指令对视频编码性能的影响

在视频编解码领域,为了满足实时性要求,通常需要借助SIMD或Vector指令对核心算子进行深度性能优化。不同指令集架构都提供了各自的向量化方案,例如x86平台的AVX系列指令,ARM架构的NEON以及SVE可扩展向量指令,还有RISC-V架构的Vector扩展(RVV)。这些向量化技术能够同时处理多个数据元素,大幅提升编解码算法中的像素处理、运动估计、变换量化等关键环节的执行效率。在目前已发布的RVV 1.0标准中,有三条指令的缺失对视频编解码的性能表现有着不容忽视的影响。

绝对差值

绝对差值计算是视频编码中运动估计的核心操作。在x265等编码器中,计算两个像素块之间的差异需要频繁使用向量绝对差值指令。ARM架构可通过单条 uabd/sabd 指令即可完成这一操作,而在RISC-V 中则需要使用至少三条指令组合才能实现相同功能。这种成倍的指令开销在热路径中会被不断放大,直接影响编码性能。对于需要实时处理高清视频的场景,这种效率差距意味着更高的功耗和更低的帧率。

示例 arm示例 risc-v示例
指令组合 uabd v1.8b, v16.8b, v17.8b vmaxu.vv v0, v1, v2
vminu.vv v3, v1, v2
vsub.vv v0, v0, v3

点积运算

ARM从v8.6-a版本开始提供了udot/sdot等点积指令,这些指令可以用于优化SAD、SSD等视频编解码中的核心算子,能够在一条指令内完成乘法与累加操作,实现高效的一步到位累加求和,且无需额外的数据类型转换,大幅提升了处理效率。相比之下,RISC-V开发者为了实现相同的功能,需要使用类型扩展指令、向量加法/乘加指令以及归约求和指令的组合来完成等效的计算流程。这种多指令组合的方式不仅显著增加了总的指令数量,还因为多条指令之间的数据依赖关系,容易引发流水线停顿,进而影响整体的执行效率和吞吐量。

示例 arm示例 risc-v示例
指令组合 movi v1.16b, #1
.rept x
...
udot v0.4s, v4.16b, v1.16b
.endr
.rept x
...
vsetvli zero, t1, e32, m4, ta, ma
vzext.vf4 v0, v8
vadd.vv v4, v4, v0
.endr
vmv.v.i v0, 0
vredsum.vs v0, v4, v0

向量转置

三种缺失指令中影响最大的是向量转置操作。x265编码器中的SATD(哈达玛变换对决差值和)等核心算法频繁使用4x4、8x8等小矩阵转置。ARM通过trn1/trn2指令交织数据,可以在寄存器内高效完成转置。而RISC-V目前只能通过组合指令的方案实现:一是使用如vrgather、vmerge等依赖索引/掩码操作的指令进行寄存器内重组,但需要配合构造索引或掩码;二是使用分段存/取指令读写内存,但需要借助昂贵的访存操作而非纯粹的寄存器操作。这些方案目前都无法达到ARM纯寄存器操作的效率,也直接导致了RISC-V在视频编码关键热路径上的性能劣势。

转置transpose 4x8示例 arm示例 risc-v segment load示例 risc-v vrgather示例
指令组合 trn1 v4.8h, v0.8h, v1.8h
trn2 v5.8h, v0.8h, v1.8h
trn1 v6.8h, v2.8h, v3.8h
trn2 v7.8h, v2.8h, v3.8h
trn1 v0.4s, v4.4s, v6.4s
trn2 v2.4s, v4.4s, v6.4s
trn1 v1.4s, v5.4s, v7.4s
trn2 v3.4s, v5.4s, v7.4s
vsetivli zero, 8, e16, m1, ta, ma
li t1, 16
vlsseg4e16.v v0, (a0), t1
addi a0, a0, 8
vlsseg4e16.v v4, (a0), t1
vslideup.vi v0, v4, 4
vslideup.vi v1, v5, 4
vslideup.vi v2, v6, 4
vslideup.vi v3, v7, 4
vsetivli zero, 8, e16, m1, ta, ma
vid.v v4
li t1, 8
vand.vi v5, v4, 3
vmul.vx v5, v5, t1
vand.vi v4, v4, -4
vadd.vv v8, v5, v4
vadd.vi v9, v8, 1
vadd.vi v10, v8, 2
vadd.vi v11, v8, 3
li t1, 32
vsetvli zero, t1, e16, m4, ta, ma
vrgatherei16.vv v4, v0, v8

目前,RISC-V社区已充分意识到上述指令缺失问题,并相继提出了Zvabd、Zvdot4a8i/Zvqdotq、Zvzip等一系列新扩展提案。其中,Zvabd正是为解决绝对差值计算的缺失而设计,而Zvzip则提供了类似ARM架构中的数据交织指令。可以预见,随着这些关键指令缺口的逐步填补,RISC-V在视频编解码领域的性能差距将不断缩小。对于开发者而言,这意味着在享受RISC-V开源、可灵活定制等固有优势的同时,未来也能够获得一流的视频处理体验。

结语

优化后的RISC-V架构x265视频编码器,在编码性能上已达到同级别ARM架构的85.6%,该结果为第一轮优化的阶段性成果,目前相关优化工作仍在持续进行中。这一进展表明,在服务器CPU 视频编码场景下,RISC-V架构具备未来超越ARM架构的潜力与可行性。

此次性能突破不仅验证了RISC-V向量扩展在处理高复杂度、内存密集型计算任务中的高效性与可扩展性,也充分展示了其在多媒体处理领域的重要价值。通过将高性能算子优化与精细化运行时调度机制相结合,砺睿微成功构建了面向RISC-V平台的高效视频编码能力,填补了当前RISC-V生态系统在专业级视频处理软件栈中的关键空白。该成果为后续在RISC-V架构上构建高效、可靠且具备成本优势的视频编码基础设施提供了坚实的技术支撑,进一步推动了RISC-V在数据中心、边缘计算及多媒体服务等高端应用场景的产业化落地进程。


北京砺睿微电子科技有限公司(简称“砺睿微”)由深圳市中兴微电子技术有限公司为投资主体,于2023年在北京经济技术开发区注册成立,是北京市高精尖产业发展布局在算力基础设施建设领域重点引进的一家高科技创新企业。公司致力于提高国产算力芯片的核心竞争力和相关产业链的快速发展。