Open negge opened 5 months ago
I suspect #763 contributes significantly to the poor performance for 10-bit.
Interestingly, profiling data for x64_64
looks quite different from aarch64
(summer_nature_1080p
):
rav1d
11.12% dav1d dav1d [.] rav1d::src::recon::decode_coefs
9.21% dav1d dav1d [.] rav1d::src::decode::decode_b_inner
5.10% dav1d dav1d [.] rav1d::src::refmvs::rav1d_refmvs_find
3.92% dav1d dav1d [.] rav1d::src::recon::mc
3.85% dav1d dav1d [.] dav1d_msac_decode_symbol_adapt4_sse2
3.60% dav1d dav1d [.] rav1d::src::refmvs::load_tmvs_c
3.45% dav1d dav1d [.] rav1d::src::recon::rav1d_recon_b_inter
3.35% dav1d dav1d [.] rav1d::src::refmvs::add_temporal_candidate
2.72% dav1d dav1d [.] rav1d::src::refmvs::add_spatial_candidate
2.47% dav1d dav1d [.] dav1d_msac_decode_symbol_adapt4_sse2.renorm5
1.84% dav1d dav1d [.] dav1d_msac_decode_bool_adapt_sse2
1.57% dav1d dav1d [.] dav1d_prep_8tap_8bpc_avx512icl.hv_loop
1.56% dav1d dav1d [.] ..@1032.branch_instr
1.51% dav1d dav1d [.] rav1d::src::decode::decode_sb
1.19% dav1d libc.so.6 [.] __memset_evex_unaligned_erms
1.16% dav1d dav1d [.] dav1d_lpf_h_sb_y_8bpc_avx512icl.loop
1.04% dav1d dav1d [.] dav1d_msac_decode_symbol_adapt4_sse2.end
1.01% dav1d dav1d [.] ..@1385.branch_instr
1.00% dav1d dav1d [.] rav1d::src::refmvs::scan_col
0.98% dav1d dav1d [.] rav1d::src::cdef_apply::rav1d_cdef_brow
dav1d 1.4.0
7.41% dav1d libdav1d.so.7.0.0 [.] decode_b
7.19% dav1d libdav1d.so.7.0.0 [.] decode_coefs
6.24% dav1d libdav1d.so.7.0.0 [.] dav1d_refmvs_find
3.66% dav1d libdav1d.so.7.0.0 [.] mc
3.57% dav1d libdav1d.so.7.0.0 [.] dav1d_recon_b_inter_8bpc
3.49% dav1d libdav1d.so.7.0.0 [.] dav1d_msac_decode_symbol_adapt4_sse2
3.38% dav1d libdav1d.so.7.0.0 [.] decode_coefs.constprop.0
3.19% dav1d libdav1d.so.7.0.0 [.] add_temporal_candidate
2.96% dav1d libdav1d.so.7.0.0 [.] dav1d_msac_decode_symbol_adapt4_sse2.renorm5
2.07% dav1d libdav1d.so.7.0.0 [.] dav1d_msac_decode_bool_adapt_sse2
2.01% dav1d libdav1d.so.7.0.0 [.] add_spatial_candidate
1.78% dav1d libdav1d.so.7.0.0 [.] dav1d_prep_8tap_8bpc_avx512icl.hv_loop
1.73% dav1d libdav1d.so.7.0.0 [.] ..@1032.branch_instr
1.69% dav1d libdav1d.so.7.0.0 [.] dav1d_create_lf_mask_inter
1.69% dav1d libdav1d.so.7.0.0 [.] dav1d_load_tmvs_sse4.xloop
1.50% dav1d libdav1d.so.7.0.0 [.] mask_edges_inter
1.44% dav1d libdav1d.so.7.0.0 [.] scan_col
1.40% dav1d libdav1d.so.7.0.0 [.] dav1d_msac_decode_symbol_adapt4_sse2.end
1.28% dav1d libdav1d.so.7.0.0 [.] dav1d_lpf_h_sb_y_8bpc_avx512icl.loop
1.27% dav1d libdav1d.so.7.0.0 [.] scan_row
~I expect the multithreaded regressions here to be partially related to #763, so I plan to start there.~ Scrolled too far and missed that @fbossen already said this. I need to dig into that commit but I do expect it to be a significant culprit.
Similar to https://github.com/memorysafety/rav1d/issues/804, the performance of
target/release/dav1d
onx86_64
is worse thandav1d 1.4.0-83-g872e470
on both 8-bit and 10-bit videos in both single-threaded and multi-threaded configurations. There is something especially odd going on with 10-bit multi-threaded where the CPU utilization is almost a 1/3 lower than dav1d, and thus takes 154% longer to decode.Single-Threaded
Multi-Threaded
Single-Threaded Data
Multi-Threaded Data