这是一篇关于优化rav1d视频解码器性能的文章,主要内容总结如下:
- 背景与目的:
rav1d是dav1dAV1解码器的Rust版本,作者参与了memorysafety.org的竞赛以提升其性能。作者使用采样分析器比较rav1d和dav1d的运行情况,寻找性能优化点。 - 基线测试:在M3芯片上,
rav1d比dav1d在特定样本文件上的运行速度慢约9%(6秒)。使用hyperfine工具在单线程模式下进行本地构建和比较。 性能分析:
- 使用
samply采样分析器捕捉dav1d和rav1d在相同输入下的运行快照,以asm函数作为“锚点”进行比较。发现rav1d中cdef_filter_neon_erased函数初始化了一个较大的临时缓冲区,而dav1d未初始化,通过将缓冲区改为MaybeUninit类型,减少了约400个样本的运行时间。 - 再次使用采样分析器的“倒置堆栈”视图,关注
add_temporal_candidate函数,发现rav1d中Mv结构体的默认PartialEq实现导致代码生成不佳,通过将Mv定义为union并使用transmute重新解释为u32来实现更优的比较,再次减少了约0.5秒的运行时间。
- 使用
- 总结:通过两个相对简单的优化,
rav1d的运行时间减少了约1.7秒(约2.3%),与dav1d的差距缩小了约30%。仍有更多优化空间,这种比较dav1d和rav1d的分析方法有望发现更多优化点。作者鼓励大家尝试并在相关论坛讨论。同时还提到了其他相关文章。
总体而言,通过对rav1d代码的细致分析和优化,取得了一定的性能提升,为进一步优化提供了思路。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。