# 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: ```sh rav1e _first64.y4m --threads 1 --speed 10 --quantizer 100 --limit 64 --output .ivf rav1e _first64.y4m --threads 1 --speed 6 --quantizer 100 --limit 64 --output .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](https://media.xiph.org/video/derf/), 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 ```sh 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: ```sh 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](https://github.com/xiph/rav1e/tree/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 - `bin/rav1e-0.8.0`: unverändertes rav1e 0.8.0; - `bin/rav1e-0.8.0-takt`: rav1e 0.8.0 nach der TAKT-Optimierung; - `tools/fetch_clips.py`: lädt die fünf Clips von Xiph.org herunter und prüft ihre SHA-256; - `tools/run_bench.sh`: führt beide Programme aus, vergleicht die Ausgaben, gibt die Zeiten aus; - `tools/expected_ivf.sha256`: SHA-256 der zehn Ausgabedateien; - `measurements.json`, `SHA256SUMS`, `LICENSE`, `THIRD_PARTY_LICENSES.txt`. ## 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](https://orange.blender.org/)). Park Joy stammt aus dem SVT-MultiFormat-Testsatz (Sveriges Television; Bedingungen im [SVT-Dokument](https://media.xiph.org/video/derf/vqeg.its.bldrdoc.gov/HDTV/SVT_MultiFormat/SVT_MultiFormat_v10.pdf)). 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.