< 返回版块

Mike Tang 发表于 2024-12-11 00:51

内存安全的 PNG 解码器现在显著超越了传统 C 库的性能

内存安全的 PNG 解码器现在显著超越了传统 C 库的性能

核心要点:

  1. 性能表现

    • Rust 的 png crate 在 x86 上比 libpng 快 1.8 倍,在 ARM 上快 1.5 倍。
    • 使用了 QOI benchmark corpus 对多种实现进行了基准测试,测试结果显示内存安全的实现(pngzune-pngwuffs)在速度上全面领先于 C 的实现(libpngspngstb_image)。
  2. 技术原理

    • DEFLATE 压缩
      • png crate 使用了流式解压器 fdeflate,通过批量字节解码等优化策略提升性能,同时支持流式解压以实现更广泛的适用性。
      • zune-pngwuffs 则采用一次性解压整个图像的策略。
    • 过滤器优化
      • png crate 依赖于 Rust 编译器的自动矢量化,而不是显式的 SIMD 指令。这种方法性能跨架构表现稳定,x86 平台上还结合了 stb_image 的过滤器实现。
      • 其他库(例如 zune-pngstb_image)则主要依赖手动编写的 SIMD 指令,导致其在不同架构上的表现不一致。
  3. 适用性

    • Rust 的 png crate 已用于 image crate,显示其广泛的生产环境适用性。
    • Chromium 浏览器正在试验用 Rust 的 png crate 替代 libpng。
  4. 生产就绪

    • 内存安全的实现支持现代 PNG 功能,如 APNG、多种辅助块读取/写入。
    • pngzune-png 已通过超过 10 万张图片的测试验证其稳定性。
    • wuffs 在某些灰度图像处理上存在已知问题,但可能与配置有关。

这表明,现代内存安全的实现不仅安全性高,还能在性能上赶超甚至超越传统内存不安全的 C 实现。

https://www.reddit.com/r/rust/comments/1ha7uyi/memorysafe_png_decoders_now_vastly_outperform_c/

硬核Rust学习材料

这哥们儿用心整理了硬核版Rust学习材料,大家作为进阶可以关注。

https://security.humanativaspa.it/an-offensive-rust-encore/

--

From 日报小组 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页