← zurück zum Showcase

TAKT-Showcase: rav1e 0.8.0, AV1-Kodierung von Xiph-Testclips

Zwei Builds des AV1-Encoders rav1e in Version 0.8.0: das unveränderte Release und derselbe Encoder nach der TAKT-Optimierung. Auf fünf öffentlichen Testclips von Xiph.org schreiben beide dieselben AV1-Dateien, Byte für Byte, und der TAKT-Build ist mit speed 10 1,38-mal und mit speed 6 1,30-mal schneller (CPU-Takte, ein Thread). Das Paket enthält beide Programme, ein Skript, das die Clips von Xiph.org herunterlädt, ein Skript, das den Vergleich ausführt, sowie unsere Messungen.

Was der Benchmark macht

Jeder Clip wird mit einer Kommandozeile kodiert, die für beide Programme identisch ist:

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

Das Preset speed 10 ist das schnellste von rav1e, speed 6 ist die Voreinstellung. Die Clips sind die ersten 64 Frames der originalen 8-Bit-4:2:0-Y4M-Dateien aus der Sammlung Xiph.org Video Test Media, unverändert (keine Skalierung, keine Neukodierung):

Clip Bildgröße, Bildrate Inhalt Quelldatei bei Xiph.org
Elephants Dream 1280×720, 24 fps 3D-Animation elephants_dream_720p24.y4m.xz
Park Joy 1280×720, 50 fps Menschen und Laub in einem Park park_joy_420_720p50.y4m
Johnny 1280×720, 60 fps Sprecher in Nahaufnahme Johnny_1280x720_60.y4m
Bus 352×288 (CIF), 30 fps Bus und Straßenverkehr bus_cif.y4m
Stefan 352×240 (SIF), 29,97 fps Tennisspieler stefan_sif.y4m

Messung (TAKT-Messstand)

AMD Threadripper PRO 5975WX (Zen 3), Linux. Ein dedizierter Kern, der Rest seines Core-Complex bleibt im Leerlauf; Takte und Instruktionen im User-Modus aus perf stat, dazu die Wall-Time. 7 abwechselnde Runden: In jeder Runde wird jeder Clip von beiden Programmen direkt nacheinander kodiert, in ungeraden Runden zuerst vom Original, in geraden zuerst von TAKT; wir nehmen den Median pro Clip und Programm. Die Beschleunigung für ein Preset ist die Summe der fünf Original-Mediane geteilt durch die Summe der fünf TAKT-Mediane. Gemessen wurden genau die Dateien in bin/, mit tools/run_bench.sh.

Preset Original, Mrd. Takte TAKT, Mrd. Takte Beschleunigung, Takte Original, s TAKT, s Beschleunigung, Zeit
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×

Pro Clip (Beschleunigung nach Takten; nach Wall-Time in Klammern):

Clip 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×)

Die kleinste Beschleunigung pro Clip beträgt 1,28× nach Takten (Elephants Dream, speed 6). Alle Einzelmessungen, Mediane und Instruktionszahlen stehen in measurements.json.

Äquivalenz

Auf diesem Benchmark schreibt der TAKT-Build exakt denselben Bitstream wie das unveränderte rav1e: In jeder Runde wurden alle zehn Kodierungen (5 Clips × 2 Presets) Byte für Byte verglichen, insgesamt 70 Paare, 70 identisch. Die SHA-256 jeder Ausgabedatei steht in tools/expected_ivf.sha256; tools/run_bench.sh prüft Ihre Ausgaben dagegen. Dieses Showcase umfasst die obige Konfiguration (8-Bit-4:2:0-Eingabe, ein Thread, speed 10 und 6, quantizer 100); andere rav1e-Optionen waren nicht Teil dieser Messung.

Ausführen

python3 tools/fetch_clips.py              # lädt etwa 300 MB herunter, schreibt clips/ (283 MB), prüft SHA-256
tools/run_bench.sh                        # 5 Runden, beide Presets, beide Programme; etwa 20 Min. auf unserem Messstand
CPU=3 tools/run_bench.sh 3                # jede Kodierung an Kern 3 binden; 3 Runden
SPEEDS=10 tools/run_bench.sh 1            # kurzer Überblick: eine Runde mit speed 10 (etwa 1 Min.)

run_bench.sh gibt jede Kodierung, eine Tabelle der Mediane und Beschleunigungen sowie die Anzahl identischer Ausgabepaare aus; weicht ein Paar ab, endet es mit Status 1. Takte werden angegeben, wenn perf cycles:u zählen kann (andernfalls nur die Wall-Time). Die Rohdaten landen in runs.csv in dem Arbeitsverzeichnis, das das Skript ausgibt. Beide Programme lassen sich auch direkt aufrufen, wie eine normale rav1e-Kommandozeile:

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                 # identisch

Voraussetzungen: Linux x86-64 mit glibc 2.34 oder neuer und eine CPU mit x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell und neuer, AMD Zen und neuer). Python 3.8+ für fetch_clips.py (nur Standardbibliothek); perf ist optional.

Wie die Programme gebaut wurden

Beide auf dieselbe Weise: rustc 1.96.0, cargo build --release --locked --bin rav1e mit dem eigenen Release-Profil von rav1e (Thin LTO) und den Standard-Features (einschließlich des NASM-Assemblercodes), -C target-cpu=x86-64-v3 -C debuginfo=0, Symbole entfernt. bin/rav1e-0.8.0 ist aus dem unveränderten rav1e-Quellcode beim Git-Tag v0.8.0 (Commit 1fd67cd) gebaut; Sie können es selbst bauen und vergleichen. bin/rav1e-0.8.0-takt ist aus demselben Quellcode nach der TAKT-Optimierung gebaut. Der optimierte Quellcode wird nicht veröffentlicht: Wir liefern Builds.

Inhalt

Lizenzen und Rechte an den Clips

rav1e wird unter der BSD 2-Clause License und der Alliance for Open Media Patent License 1.0 vertrieben; beide Programme werden zu denselben Bedingungen vertrieben (LICENSE), und der in sie gelinkte Fremdcode ist in THIRD_PARTY_LICENSES.txt aufgeführt. Unsere Skripte stehen unter der MIT-Lizenz.

Die Clips sind nicht Teil dieses Pakets: tools/fetch_clips.py lädt sie von Xiph.org herunter, und es gelten weiterhin die dort genannten Bedingungen. Elephants Dream ist © Blender Foundation / Netherlands Media Art Institute, lizenziert unter Creative Commons Attribution 2.5 (orange.blender.org). Park Joy stammt aus dem SVT-MultiFormat-Testsatz (Sveriges Television; Bedingungen im SVT-Dokument). Johnny ist im Katalog von Xiph.org als gemeinfrei (Public Domain) gekennzeichnet. Bus und Stefan sind Standard-Testsequenzen der Xiph.org-Sammlung, die deren ursprüngliche Quellen angibt.

Quelldatei: README.de.md

Telegram