在 Rust 中优化 rav1d,一个 AV1 解码器

主要观点:AV1 视频格式重要,需内存安全高性能解码器rav1d,与 Immunant 团队合作开发,本文探讨其性能优化。
关键信息:

  • rav1d是从 C 语言的高性能dav1d解码器移植到内存安全 Rust 语言的版本。
  • 性能测量用hyperfine在特定配置下测试,以dav1d编译为基准对比rav1d性能。
  • c2rust转译的 Rust 代码初始比原 C 代码慢 3.8%,推测数组边界检查等是原因。
  • 优化过程包括动态调度、内部可变性、边界检查、初始化、无分支指令和栈使用、推导CloneCopy等方面。
  • 经过优化,x86_64 上性能开销从约 11%降至 6%以下,但仍有改进空间。
    重要细节:
  • dav1d通过函数指针或enum调度处理汇编例程,rav1d有修改。
  • 引入新锁和原子字段提供内部可变性,小心避免线程争用。
  • 利用多种方法消除边界检查,如预切片、利用类型保证等。
  • 初始化大型栈缓冲区成本高,可使用MaybeUninit
  • 减少栈使用困难,需避免panic增加栈使用,尝试优化分支。
  • 不同类型推导CloneCopy对代码生成影响不同。
    支持信息:通过具体代码示例和实验数据说明各优化点及效果,如不同代码修改前后的性能对比等。
阅读 22
0 条评论