← retour à la vitrine

Vitrine TAKT : rav1e 0.8.0, encodage AV1 de clips de test Xiph

Deux builds de l’encodeur AV1 rav1e, version 0.8.0 : la version officielle et le même encodeur après optimisation par TAKT. Sur cinq clips de test publics de Xiph.org, les deux produisent les mêmes fichiers AV1, octet pour octet, et le build TAKT est 1,38× plus rapide en vitesse 10 et 1,30× plus rapide en vitesse 6 (cycles CPU, un thread). Vous trouverez ici les deux programmes, un script qui télécharge les clips depuis Xiph.org, un script qui lance la comparaison, et nos mesures.

Ce que fait le benchmark

Chaque clip est encodé avec une seule ligne de commande, identique pour les deux programmes :

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

La vitesse 10 est le préréglage le plus rapide de rav1e, la vitesse 6 son préréglage par défaut. Les clips sont les 64 premières images de fichiers Y4M originaux 8 bits 4:2:0 de la collection Xiph.org Video Test Media, sans modification (ni redimensionnement, ni réencodage) :

Clip Taille d’image, fréquence Contenu Fichier source Xiph.org
Elephants Dream 1280×720, 24 i/s animation 3D elephants_dream_720p24.y4m.xz
Park Joy 1280×720, 50 i/s personnes et feuillage dans un parc park_joy_420_720p50.y4m
Johnny 1280×720, 60 i/s personne qui parle face caméra Johnny_1280x720_60.y4m
Bus 352×288 (CIF), 30 i/s bus et circulation bus_cif.y4m
Stefan 352×240 (SIF), 29,97 i/s joueur de tennis stefan_sif.y4m

Mesure (banc TAKT)

AMD Threadripper PRO 5975WX (Zen 3), Linux. Un cœur dédié, le reste de son complexe de cœurs maintenu inactif ; cycles et instructions en mode utilisateur relevés par perf stat, plus le temps écoulé. Sept tours entrelacés : à chaque tour, chaque clip est encodé par les deux programmes l’un après l’autre, la version officielle en premier aux tours impairs et TAKT en premier aux tours pairs ; nous prenons la médiane par clip et par programme. L’accélération pour un préréglage est la somme des cinq médianes de la version officielle divisée par la somme des cinq médianes TAKT. Ce sont exactement les fichiers de bin/ qui ont été mesurés, avec tools/run_bench.sh.

Préréglage Officielle, Gcycles TAKT, Gcycles Accélération, cycles Officielle, s TAKT, s Accélération, temps
vitesse 10 139,8 101,6 1,38× 32,3 23,7 1,37×
vitesse 6 446,2 343,2 1,30× 101,9 78,2 1,30×

Par clip (accélération en cycles ; en temps écoulé entre parenthèses) :

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

La plus petite accélération par clip est de 1,28× en cycles (Elephants Dream, vitesse 6). Tous les échantillons, les médianes et les nombres d’instructions figurent dans measurements.json.

Équivalence

Sur ce benchmark, le build TAKT produit exactement le même flux binaire que rav1e d’origine : à chaque tour, les dix encodages (5 clips × 2 préréglages) ont été comparés octet par octet, soit 70 paires au total, 70 identiques. Le SHA-256 de chaque fichier de sortie figure dans tools/expected_ivf.sha256 ; tools/run_bench.sh vérifie vos sorties par rapport à ce fichier. Cette vitrine couvre la configuration ci-dessus (entrée 8 bits 4:2:0, un thread, vitesses 10 et 6, quantificateur 100) ; les autres options de rav1e ne faisaient pas partie de cette mesure.

Exécution

python3 tools/fetch_clips.py              # télécharge environ 300 Mo, écrit clips/ (283 Mo), vérifie les SHA-256
tools/run_bench.sh                        # 5 tours, les deux préréglages, les deux programmes ; environ 20 min sur notre banc
CPU=3 tools/run_bench.sh 3                # épingle chaque encodage sur le cœur 3 ; 3 tours
SPEEDS=10 tools/run_bench.sh 1            # aperçu rapide : un tour en vitesse 10 (environ 1 min)

run_bench.sh affiche chaque encodage, un tableau des médianes et des accélérations, et le nombre de paires de sorties identiques ; il se termine avec le code 1 si une paire diffère. Les cycles sont indiqués lorsque perf peut compter cycles:u (sinon, seul le temps écoulé est indiqué). Les données brutes sont écrites dans runs.csv, dans le répertoire de travail qu’il affiche. Chaque programme peut aussi être lancé directement, comme une ligne de commande rav1e ordinaire :

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

Configuration requise : Linux x86-64 avec glibc 2.34 ou plus récente, et un CPU x86-64-v3 (AVX2, FMA, BMI2 : Intel Haswell et plus récents, AMD Zen et plus récents). Python 3.8+ pour fetch_clips.py (bibliothèque standard uniquement) ; perf est facultatif.

Comment les programmes ont été compilés

Tous deux de la même manière : rustc 1.96.0, cargo build --release --locked --bin rav1e avec le profil release propre à rav1e (thin LTO) et ses fonctionnalités par défaut (y compris son assembleur NASM), -C target-cpu=x86-64-v3 -C debuginfo=0, symboles supprimés. bin/rav1e-0.8.0 est compilé à partir du code source non modifié de rav1e au tag git v0.8.0 (commit 1fd67cd) ; vous pouvez le compiler vous-même et comparer. bin/rav1e-0.8.0-takt est compilé à partir du même code source après optimisation par TAKT. Le code source optimisé n’est pas publié : nous livrons des builds.

Contenu

Licences et droits sur les clips

rav1e est distribué sous la licence BSD 2-Clause et l’Alliance for Open Media Patent License 1.0 ; les deux programmes sont distribués selon les mêmes conditions (LICENSE), et le code tiers qui y est lié est répertorié dans THIRD_PARTY_LICENSES.txt. Nos scripts sont sous licence MIT.

Les clips ne font pas partie de cette archive : tools/fetch_clips.py les télécharge depuis Xiph.org, et ils restent soumis aux conditions qui y sont indiquées. Elephants Dream est © Blender Foundation / Netherlands Media Art Institute, sous licence Creative Commons Attribution 2.5 (orange.blender.org). Park Joy provient du jeu de test SVT MultiFormat (Sveriges Television ; conditions dans le document SVT). Johnny est indiqué comme relevant du domaine public dans le catalogue Xiph.org. Bus et Stefan sont des séquences de test standard de la collection Xiph.org, qui en indique les sources d’origine.

Texte source : README.fr.md

Telegram