Skip to content
  • Martin Storsjö's avatar
    arm64: loopfilter: Implement NEON loop filters · 0282f6f3
    Martin Storsjö authored
    The exact relative speedup compared to C code is a bit vague and hard
    to measure, depending on eactly how many filtered blocks are skipped,
    as the NEON version always filters 16 pixels at a time, while the
    C code can skip processing individual 4 pixel blocks.
    
    Additionally, the checkasm benchmarking code runs the same function
    repeatedly on the same buffer, which can make the filter take
    different codepaths on each run, as the function updates the buffer
    which will be used as input for the next run.
    
    If tweaking the checkasm test data to try to avoid skipped blocks,
    the relative speedups compared to C is between 2x and 5x, while
    it is around 1x to 4x with the current checkasm test as such.
    
    Benchmark numbers from a tweaked checkasm that avoids skipped
    blocks:
    
                            Cortex A53     A72     A73
    lpf_h_sb_uv_w4_8bpc_c:      2954.7  1399.3  1655.3
    lpf_h_sb_uv_w4_8bpc_neon:    895.5   650.8   692.0
    lpf_h_sb_uv_w6_8bpc_c:      3879.2  1917.2  2257....
    0282f6f3