rav1e의 한 달 - 2월

6037 단어 av1rustrav1e

rav1e is an AV1 encoder written in Rust



지난 달에 일어난 일에 대한 간략한 요약입니다. 매달 요약글을 쓰도록 노력하겠습니다.

2월 요약



우리는 인코딩 속도를 개선하기 위해 많은 노력을 기울였습니다. 여정의 일부 세부 정보를 읽을 수 있습니다.
  • 메모리 액세스 패턴과 가장 인기 있는 코드 경로에서 많이 액세스되는 구조를 분석합니다.

  • 따라서 평균 스레드 사용량을 개선하고 속도와 대기 시간을 모두 개선합니다.

  • , 품질 대 속도 영향을 측정하고 그에 따라 다시 조정하십시오.

  • The benchmarks are prepared using speed-levels-rs.

    The encoder is using the following settings:

    --threads 16 --tiles 16 -l 100 <file> -o <encoded> -s <level>
    

    The source file is Bosphorus from the ultravideo test sequences, the 1080p 10bit version is the 4k 10bit version scaled down, since it is not available on the website.





    전반적으로 우리의 aarch64 지원은 상당히 좋아지고 있지만 8비트에는 여전히 개선의 여지가 많이 있습니다.

    반면에 x86_64에는 아직 사용할 수 없는 10비트 최적화가 있습니다. SIMD 적용 범위를 개선하는 데 도움을 주시면 대단히 환영합니다 :)



    더 깊이 파고들다



    x86_64



    예상대로 p20210209p20210216 사이에 발생한 메모리 레이아웃 최적화는 속도 0과 1에 가장 큰 영향을 미쳤으며 임시 rdo lookahead 계산을 최적화하고 조정하면 속도 수준 9와 10에 가장 큰 영향을 미쳤습니다.



    속도 수준
    p20210209
    p20210216
    p20210223


    0
    x1.23
    x1.29
    x1.30

    1
    x1.20
    x1.24
    x1.33

    2
    x1.08
    x1.11
    x1.22


    x1.04
    x1.07
    x1.25

    4
    x1.04
    x1.06
    x1.24

    5
    x1.05
    x1.07
    x1.27

    6
    x1.04
    x1.05
    x1.37

    7
    x1.03
    x1.06
    x1.36

    8
    x1.04
    x1.06
    x1.39

    9
    x1.00
    x1.02
    x1.52

    10
    x1.00
    x1.01
    x1.94






    x86_64 10비트 인코딩도 유사하게 작동합니다. 그것에 대한 우리의 SIMD 지원은 1월에 large boost을 받았으며 3월에 이를 더욱 개선하기 위한 지속적인 노력이 있습니다.



    속도 수준
    p20210209
    p20210216
    p20210223


    0
    x1.12
    x1.12
    x1.17

    1
    x1.10
    x1.11
    x1.26

    2
    x1.04
    x1.04
    x1.23


    x1.00
    x1.02
    x1.28

    4
    x1.01
    x1.02
    x1.27

    5
    x1.02
    x1.02
    x1.29

    6
    x1.00
    x1.01
    x1.37

    7
    x1.01
    x1.01
    x1.37

    8
    x1.00
    x1.01
    x1.38

    9
    x0.99
    x1.00
    x1.50

    10
    x0.99
    x1.00
    x1.95







    아크64



    aarch64에 대한 최적화의 영향은 속도 10에서 상대적으로 상당히 크게 향상되어 더욱 급진적이었습니다.



    속도 수준
    p20210209
    p20210216
    p20210223


    0
    x1.14
    x1.15
    x1.31

    1
    x1.11
    x1.10
    x1.59

    2
    x1.03
    x1.03
    x1.63


    x1.03
    x1.01
    x1.76

    4
    x1.01
    x1.01
    x1.77

    5
    x1.02
    x1.01
    x1.88

    6
    x1.02
    x1.00
    x2.07

    7
    x1.01
    x1.00
    x2.07

    8
    x1.02
    x1.00
    x2.10

    9
    x1.00
    x0.99
    x2.45

    10
    x1.01
    x0.98
    x4.75







    10비트 부스트는 극단적이지는 않지만 여전히 상당합니다.



    속도 수준
    p20210209
    p20210216
    p20210223


    0
    x1.13
    x1.17
    x1.30

    1
    x1.08
    x1.11
    x1.54

    2
    x1.02
    x1.05
    x1.57


    x1.00
    x1.03
    x1.66

    4
    x1.00
    x1.02
    x1.67

    5
    x1.00
    x1.03
    x1.74

    6
    x1.00
    x1.02
    x1.87

    7
    x1.00
    x1.03
    x1.87

    8
    x1.00
    x1.02
    x1.89

    9
    x0.99
    x1.01
    x2.12

    10
    x0.98
    x1.02
    x2.96







    동작에 큰 차이가 있는지 확인하기 위해 몇 가지 다른 aarch64 시스템에서 테스트했습니다.



    Apple M1은 상당히 다르지만 제가 기대하는 것입니다. 아마도 다른 블로그 게시물에서 그것에 대해 조금 더 이야기 할 것입니다.

    다음에 온다



    우리는 이미 x86_64 및 aarch64 모두에 대해 추가 SIMD를 확보했으며 segment selection 개선 작업을 시작했으며 eventually 전체 대기 시간에 많은 영향을 미치지 않으면서 더 나은 스레드 풀 사용을 제공하는 내부 아키텍처를 생각해 냈습니다.

    3월은 흥미진진할 것입니다.

    좋은 웹페이지 즐겨찾기