Blend2D

主要观点:介绍了高性能 PNG 编解码器,PNG 虽已存在数十年但仍在不断优化,其解码的最大挑战是 DEFLATE 压缩算法,文中详细阐述了高性能解码 DEFLATE 流的方法,包括快速构建解码表、使用快速循环等,还提到了对解码字面量的优化、流支持、重复匹配等,最后对比了 Blend2D 的 DEFLATE 解码器与其他库在 Silesia 语料库和 PNG 图像解码上的性能,得出 Blend2D 的 PNG 解码器在市场上速度较快且开源免费的结论。
关键信息

  • DEFLATE 算法是 PNG 解码的最大挑战,其不适合现代 CPU。
  • 高性能解码 DEFLATE 流的关键在于快速构建和解码表,以及使用快速循环等。
  • 对解码字面量的优化,如使用字面量对。
  • PNG 图像格式使用块,解码器需支持流。
  • 利用 SIMD 重复字节序列可提高性能。
  • Blend2D 的 PNG 解码器在多种 PNG 图像解码上速度快于其他库。
    重要细节
  • DEFLATE 解码表的最佳大小为 litlen 表 11 位、offset 表 9 位,解码时可根据数据情况调整表大小。
  • 对于字面量,每个解码项最多使用 2 个字面量。
  • PNG 图像的位流结构与 Silesia 语料库不同,解码时需针对 PNG 图像特点进行优化。
  • Blend2D 的 DEFLATE 解码器在 Silesia 语料库上性能与 libdeflate 接近,但在 PNG 图像解码上明显更快。
  • 新的 PNG 解码器中 DEFLATE 解压占约 57%的周期,较之前有所改善,其他部分也需进一步优化。
  • 在某些情况下,Blend2D 的 PNG 解码速度比 QOI 参考解码器还快。
  • 提出利用 AVX-512 7 位表查找指令进行并行解码的想法,但未进一步实施。
阅读 9
0 条评论