← volver a la demostración

Demostración de TAKT: rav1e 0.8.0, codificación AV1 de clips de prueba de Xiph

Dos compilaciones del codificador AV1 rav1e, versión 0.8.0: la versión original publicada y el mismo codificador tras la optimización de TAKT. En cinco clips de prueba públicos de Xiph.org ambas escriben los mismos archivos AV1, byte a byte, y la compilación de TAKT es 1,38× más rápida con speed 10 y 1,30× más rápida con speed 6 (ciclos de CPU, un hilo). Aquí encontrará ambos programas, un script que descarga los clips de Xiph.org, un script que ejecuta la comparación y nuestras mediciones.

Qué hace el benchmark

Cada clip se codifica con una sola línea de comandos, idéntica para ambos programas:

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 es el preajuste más rápido de rav1e; speed 6, el predeterminado. Los clips son los primeros 64 fotogramas de archivos Y4M originales de 8 bits 4:2:0 de la colección Xiph.org Video Test Media, sin cambios (sin redimensionar ni recodificar):

Clip Tamaño de fotograma, frecuencia Contenido Archivo fuente de Xiph.org
Elephants Dream 1280×720, 24 fps animación 3D elephants_dream_720p24.y4m.xz
Park Joy 1280×720, 50 fps personas y follaje en un parque park_joy_420_720p50.y4m
Johnny 1280×720, 60 fps persona hablando a cámara Johnny_1280x720_60.y4m
Bus 352×288 (CIF), 30 fps autobús y tráfico urbano bus_cif.y4m
Stefan 352×240 (SIF), 29,97 fps jugador de tenis stefan_sif.y4m

Medición (banco de TAKT)

AMD Threadripper PRO 5975WX (Zen 3), Linux. Un núcleo dedicado, con el resto de su complejo de núcleos inactivo; ciclos e instrucciones en modo usuario de perf stat, además del tiempo de reloj. 7 rondas intercaladas: en cada ronda, cada clip se codifica con ambos programas uno tras otro, primero el original en las rondas impares y primero TAKT en las pares; tomamos la mediana por clip y programa. La aceleración de un preajuste es la suma de las cinco medianas del original dividida entre la suma de las cinco medianas de TAKT. Se midieron exactamente los archivos de bin/, con tools/run_bench.sh.

Preajuste Original, G ciclos TAKT, G ciclos Aceleración, ciclos Original, s TAKT, s Aceleración, tiempo
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×

Por clip (aceleración en ciclos; en tiempo de reloj, entre paréntesis):

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

La menor aceleración por clip es de 1,28× en ciclos (Elephants Dream, speed 6). Todas las muestras, las medianas y los recuentos de instrucciones están en measurements.json.

Equivalencia

En este benchmark, la compilación de TAKT escribe exactamente el mismo flujo de bits que rav1e original: en cada ronda se compararon byte a byte las diez codificaciones (5 clips × 2 preajustes), 70 pares en total, 70 idénticos. El SHA-256 de cada archivo de salida está en tools/expected_ivf.sha256; tools/run_bench.sh compara con él sus salidas. Esta demostración cubre la configuración anterior (entrada de 8 bits 4:2:0, un hilo, speed 10 y 6, quantizer 100); otras opciones de rav1e no formaron parte de esta medición.

Ejecución

python3 tools/fetch_clips.py              # descarga unos 300 MB, escribe clips/ (283 MB) y verifica el SHA-256
tools/run_bench.sh                        # 5 rondas, ambos preajustes, ambos programas; unos 20 min en nuestro banco
CPU=3 tools/run_bench.sh 3                # fija cada codificación al núcleo 3; 3 rondas
SPEEDS=10 tools/run_bench.sh 1            # un vistazo rápido: una ronda con speed 10 (aproximadamente 1 min)

run_bench.sh imprime cada codificación, una tabla de medianas y aceleraciones, y cuántos pares de salida son idénticos; termina con el estado 1 si algún par difiere. Los ciclos se muestran cuando perf puede contar cycles:u (en caso contrario, solo el tiempo de reloj). Los datos sin procesar se guardan en runs.csv, dentro del directorio de trabajo que el script imprime. Cualquiera de los dos programas también puede ejecutarse directamente, como una línea de comandos normal de 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                 # idénticos

Requisitos: Linux x86-64 con glibc 2.34 o posterior y una CPU con x86-64-v3 (AVX2, FMA, BMI2: Intel Haswell y posteriores, AMD Zen y posteriores). Python 3.8+ para fetch_clips.py (solo la biblioteca estándar); perf es opcional.

Cómo se compilaron los programas

Ambos de la misma manera: rustc 1.96.0, cargo build --release --locked --bin rav1e con el perfil de release propio de rav1e (thin LTO) y las features predeterminadas (incluido su código ensamblador NASM), -C target-cpu=x86-64-v3 -C debuginfo=0, sin símbolos. bin/rav1e-0.8.0 se compila a partir del código fuente sin modificar de rav1e en la etiqueta git v0.8.0 (commit 1fd67cd); puede compilarlo usted mismo y comparar. bin/rav1e-0.8.0-takt se compila a partir del mismo código fuente tras la optimización de TAKT. El código fuente optimizado no se publica: entregamos compilaciones.

Contenido

Licencias y derechos de los clips

rav1e se distribuye bajo la BSD 2-Clause License y la Alliance for Open Media Patent License 1.0; ambos programas se distribuyen en los mismos términos (LICENSE), y el código de terceros enlazado en ellos figura en THIRD_PARTY_LICENSES.txt. Nuestros scripts están bajo la licencia MIT.

Los clips no forman parte de este paquete: tools/fetch_clips.py los descarga de Xiph.org, y siguen sujetos a las condiciones indicadas allí. Elephants Dream es © Blender Foundation / Netherlands Media Art Institute, con licencia Creative Commons Attribution 2.5 (orange.blender.org). Park Joy pertenece al conjunto de prueba SVT MultiFormat (Sveriges Television; condiciones en el documento de SVT). Johnny figura como dominio público en el catálogo de Xiph.org. Bus y Stefan son secuencias de prueba estándar de la colección de Xiph.org, que indica sus fuentes originales.

Texto original: README.es.md

Telegram