← 쇼케이스로 돌아가기

TAKT 쇼케이스: rav1e 0.8.0, Xiph 테스트 클립 AV1 인코딩

AV1 인코더 rav1e 0.8.0의 두 가지 빌드입니다. 하나는 공식 릴리스이고, 다른 하나는 TAKT 최적화를 거친 같은 인코더입니다. 공개된 Xiph.org 테스트 클립 5개에서 두 빌드는 바이트 단위로 동일한 AV1 파일을 생성하며, TAKT 빌드는 speed 10에서 1.38배, speed 6에서 1.30배 빠릅니다(CPU 사이클, 단일 스레드). 이 패키지에는 두 프로그램, Xiph.org에서 클립을 내려받는 스크립트, 비교를 실행하는 스크립트, 저희 측정 결과가 들어 있습니다.

벤치마크 내용

각 클립은 두 프로그램에 동일한 명령줄 하나로 인코딩합니다:

rav1e <clip>_first64.y4m --threads 1 --speed 10 --quantizer 100 --limit 64 --output <clip>.ivf
rav1e <clip>_first64.y4m --threads 1 --speed 6  --quantizer 100 --limit 64 --output <clip>.ivf

speed 10은 rav1e의 가장 빠른 프리셋이고, speed 6은 기본값입니다. 클립은 Xiph.org Video Test Media 컬렉션의 원본 8비트 4:2:0 Y4M 파일에서 처음 64프레임을 변경 없이(크기 조정이나 재인코딩 없이) 잘라 낸 것입니다:

클립 프레임 크기, 프레임률 내용 Xiph.org 원본 파일
Elephants Dream 1280×720, 24 fps 3D 애니메이션 elephants_dream_720p24.y4m.xz
Park Joy 1280×720, 50 fps 공원의 사람들과 나뭇잎 park_joy_420_720p50.y4m
Johnny 1280×720, 60 fps 말하는 인물(토킹 헤드) Johnny_1280x720_60.y4m
Bus 352×288 (CIF), 30 fps 버스와 도로 교통 bus_cif.y4m
Stefan 352×240 (SIF), 29.97 fps 테니스 선수 stefan_sif.y4m

측정 (TAKT 측정 장비)

AMD Threadripper PRO 5975WX (Zen 3), Linux. 전용 코어 1개를 사용하고 같은 코어 컴플렉스의 나머지 코어는 유휴 상태로 유지했습니다. perf stat으로 사용자 모드 사이클과 명령어 수를, 그리고 실제 경과 시간을 측정했습니다. 교차 실행 7라운드: 각 라운드에서 모든 클립을 두 프로그램으로 연달아 인코딩하며, 홀수 라운드에서는 공식 빌드를, 짝수 라운드에서는 TAKT 빌드를 먼저 실행합니다. 클립과 프로그램별로 중앙값을 구합니다. 프리셋별 가속은 공식 빌드 중앙값 5개의 합을 TAKT 중앙값 5개의 합으로 나눈 값입니다. bin/의 파일을 그대로 tools/run_bench.sh로 측정했습니다.

프리셋 공식 빌드(10억 사이클) TAKT(10억 사이클) 가속(사이클) 공식 빌드(초) TAKT(초) 가속(시간)
speed 10 139.8 101.6 1.38× 32.3 23.7 1.37×
speed 6 446.2 343.2 1.30× 101.9 78.2 1.30×

클립별 결과(사이클 기준 가속, 괄호 안은 실제 경과 시간 기준):

클립 speed 10 speed 6
Elephants Dream 1.31× (1.31×) 1.28× (1.27×)
Park Joy 1.38× (1.38×) 1.29× (1.30×)
Johnny 1.40× (1.38×) 1.37× (1.36×)
Bus 1.40× (1.38×) 1.29× (1.29×)
Stefan 1.45× (1.40×) 1.33× (1.33×)

클립별 가속이 가장 작은 경우는 사이클 기준 1.28배입니다(Elephants Dream, speed 6). 모든 샘플, 중앙값, 명령어 수는 measurements.json에 있습니다.

동등성

이 벤치마크에서 TAKT 빌드는 공식 rav1e와 정확히 같은 비트스트림을 생성합니다. 모든 라운드에서 인코딩 결과 10개(클립 5개 × 프리셋 2개)를 바이트 단위로 비교했으며, 총 70쌍 중 70쌍이 동일했습니다. 각 출력 파일의 SHA-256은 tools/expected_ivf.sha256에 있으며, tools/run_bench.sh가 사용자의 출력을 이 값과 대조합니다. 이 쇼케이스는 위 설정(8비트 4:2:0 입력, 단일 스레드, speed 10과 6, quantizer 100)만 다룹니다. 다른 rav1e 옵션은 이번 측정에 포함되지 않았습니다.

실행

python3 tools/fetch_clips.py              # 약 300 MB를 내려받아 clips/(283 MB)를 생성하고 SHA-256 검사
tools/run_bench.sh                        # 5라운드, 두 프리셋, 두 프로그램. 저희 측정 장비에서 약 20분
CPU=3 tools/run_bench.sh 3                # 모든 인코딩을 코어 3에 고정, 3라운드
SPEEDS=10 tools/run_bench.sh 1            # 빠른 확인: speed 10에서 1라운드(약 1분)

run_bench.sh는 모든 인코딩, 중앙값과 가속 표, 동일한 출력 쌍의 수를 출력하며, 다른 쌍이 하나라도 있으면 상태 1로 종료합니다. perf로 cycles:u를 측정할 수 있으면 사이클도 보고합니다(그렇지 않으면 실제 경과 시간만 보고합니다). 원시 데이터는 화면에 출력되는 작업 디렉터리의 runs.csv에 기록됩니다. 두 프로그램 모두 일반 rav1e 명령줄처럼 직접 실행할 수도 있습니다:

bin/rav1e-0.8.0-takt clips/bus_cif_first64.y4m --threads 1 --speed 6 --quantizer 100 --limit 64 --output bus.ivf
bin/rav1e-0.8.0      clips/bus_cif_first64.y4m --threads 1 --speed 6 --quantizer 100 --limit 64 --output bus-stock.ivf
cmp bus.ivf bus-stock.ivf                 # 동일

요구 사항: glibc 2.34 이상의 Linux x86-64, x86-64-v3(AVX2, FMA, BMI2: Intel Haswell 이후, AMD Zen 이후)를 지원하는 CPU. fetch_clips.py에는 Python 3.8 이상이 필요합니다(표준 라이브러리만 사용). perf는 선택 사항입니다.

프로그램 빌드 방법

두 프로그램 모두 같은 방법으로 빌드했습니다: rustc 1.96.0, rav1e 자체 release 프로필(thin LTO)과 기본 기능(NASM 어셈블리 포함)으로 cargo build --release --locked --bin rav1e, -C target-cpu=x86-64-v3 -C debuginfo=0, 심볼 제거. bin/rav1e-0.8.0은 git 태그 v0.8.0 (커밋 1fd67cd)의 수정하지 않은 rav1e 소스로 빌드했으며, 직접 빌드해 비교할 수 있습니다. bin/rav1e-0.8.0-takt는 같은 소스를 TAKT로 최적화한 뒤 빌드했습니다. 최적화된 소스는 공개하지 않습니다. 저희는 빌드를 제공합니다.

구성

라이선스와 클립 권리

rav1e는 BSD 2-Clause License와 Alliance for Open Media Patent License 1.0에 따라 배포됩니다. 두 프로그램도 같은 조건(LICENSE)으로 배포되며, 프로그램에 링크된 서드파티 코드는 THIRD_PARTY_LICENSES.txt에 나열되어 있습니다. 저희 스크립트는 MIT License를 따릅니다.

클립은 이 패키지에 포함되어 있지 않습니다. tools/fetch_clips.py가 Xiph.org에서 내려받으며, 클립에는 그곳에 명시된 조건이 계속 적용됩니다. Elephants Dream은 © Blender Foundation / Netherlands Media Art Institute이며 Creative Commons Attribution 2.5 라이선스를 따릅니다 (orange.blender.org). Park Joy는 SVT MultiFormat 테스트 세트에 속합니다 (Sveriges Television, 이용 조건은 SVT 문서 참조). Johnny는 Xiph.org 카탈로그에 퍼블릭 도메인으로 표시되어 있습니다. Bus와 Stefan은 Xiph.org 컬렉션의 표준 테스트 시퀀스이며, 원래 출처는 컬렉션에 기재되어 있습니다.

원문: README.ko.md

Telegram