内存速度对于视频编解码性能的影响

背景

公司使用的两个评估板平台,RK3288与RK3399,CPU计算性能单核提升72%,多核提升29%(参见这个链接)。但是针对一款多人音视频引用,尽管使用了硬件编解码,但实际CPU占用,原来是90%,更换到新平台是40%+。经过分析,RK3288平台的内存拷贝环节占据CPU时间较多。内存子系统性能应当对于整体性能和体验具有重要影响,但这一环节之前被我们忽略了。

测试

为了验证内存性能的差异,这里进行了几个测试。

dd内存拷贝测试

对RK3399和RK3288进行dd内存拷贝对比测试,结果如下

可见rk3288的内存拷贝速度达到1.89GB/s,而rk3399可以达到3.20GB/s

memcpy内存拷贝测试

另外通过memcpy进行反复拷贝进行测试

结论是rk3288消耗了2.1s,rk3399消耗了0.8s

另外经过内存频率分析工具的查看,虽然没有100%确认,但基本可以确认rk3288搭配的是DDR3-1066,而rk3399-搭配的是DDR3-1600

CPU内存拷贝加速测试

另外还有一点,通过对比是否启用SIMD命令和增加每次操作的位宽进行拷贝,可以发现使用每次拷贝4字节(32bit模式)换成8字节(64bit模式),性能没有任何提升。使用neon指令一次拷贝128bit,也对性能没有任何提升。这说明一个问题。对于超过缓存的内存读写,内存带宽成为瓶颈,而CPU并不是瓶颈。

分析

视频编解码牵涉到较多的大内存拷贝和读写访问,特别是针对硬件加速编解码后的开销,更是如此。因此剩余的内存开销会比较多的落在内存拷贝上。特别是ARM平台上这些方案CPU性能相对比桌面要弱,总体来看内存拷贝的CPU开销和带来的延迟是不可忽略的。

rk3399平台选用了DDR3-1600,内存频率比rk3288选取的DDR3-1066高50%,叠加单核性能提升,得到了较好的综合性能提升。

同时引用来自techspot的一篇关于高频内存的评测文章,可以发现对于高分辨率视频编解码类应用,高频内存可以带来非常显著的性能提升

结论

针对高清晰度的视频,内存频率对于视频编解码应用性能有显著影响,即使是使用硬编硬解。因此在后续选型时,我们要注意尽量在可接受的成本下,选取高频内存。甚至一定程度上牺牲CPU提高内存规格可以达到更好的性价比。

参考

DDR扫盲——关于Prefetch与Burst的深入讨论
内存带宽测试与AVX指令集读写内存
NEON加速之memcpy在ARM平台的优化