El legendario software FFMmpeg puede ir hasta 94 veces más rápido. Todo gracias a un lenguaje casi olvidado

  • El lenguaje ensamblador puede ayudar a hacer que el código sea mucho más eficiente y potente

  • El problema está en su dificultad: los lenguajes de alto nivel son mucho más accesibles

Asm
21 comentarios Facebook Twitter Flipboard E-mail

El proyecto FFmpeg es para muchos absolutamente desconocido, pero sus prestaciones a la hora de codificar y descodificar audio y vídeo son sencillamente prodigiosas. Tanto es así que lo usan todas las grandes tecnológicas, desde YouTube hasta Netflix o Spotify.

Ensamblador. Lo curioso es que estos días alguien ha descubierto algo sorprendente: FFmpeg puede ir hasta 94 veces más rápido, y todo gracias al uso de ensamblador, un lenguaje de programación de bajo nivel que permite acceder a los recursos del PC de forma mucho más directa en comparación a como lo hacen los lenguajes de alto nivel y los compiladores que generan código ejecutable. En DeepMind lo usaron no hace mucho para crear un algoritmo de ordenación revolucionario, y es también la base de la programación de la Voyager 1.

Vamos a probar. Un grupo de desarrolladores que contribuyen al proyecto quisieron hacer una prueba implementando ciertas funciones usando el conjunto de instrucciones AVX-512. La ventaja de estas instrucciones es que permiten procesar cadenas de datos más grandes en paralelo usando registros de 512 bits, algo que es muy útil para todo tipo de tareas, pero especialmente para procesar audio y vídeo.

Hasta 94 veces más rápido. Las pruebas de rendimiento demostraron que las funciones escritas en ensamblador con el conjunto de instrucciones AVX-512 se ejecutaban considerablemente más rápido que implementaciones tradicionales escritas en el lenguaje de programación C o conjuntos de instrucciones como AVX2 (Advanced Vector Extensions, en este caso manejando 256 bits),  y las viejas SSE3 (Streaming SIMD Extension 3) de 2004. En algunos casos el código nuevo llegó a correr 94 veces más rápido que el de sus otras versiones.

Será difícil aprovechar estas mejoras. Lamentablemente, estas mejoras difícilmente llegarán a ser aprovechadas masivamente. Intel desactivó AVX-512 en sus chips porque los núcleos de alta eficiencia no las soportan, aunque hay formas de aprovecharlas desactivando esos núcleos E.

Sí están soportadas por los chips de AMD, pero el verdadero problema está en otro lado: la complejidad de dichas optimizaciones está reservada a aplicaciones muy específicas. Puede no obstante que las Big Tech hayan tomado nota y aprovechen dichas ventajas para procesar audio y vídeo en sus centros de datos.

Un lenguaje arcano pero prodigioso. Lo cierto es que el lenguaje ensamblador no es especialmente popular, y con razón. Es un lenguaje muy complejo, diferente para cada máquina/arquitectura, y es fácil cometer errores. Los lenguajes de alto nivel, los compiladores y los entornos de programación han hecho mucho más accesible estas tareas, pero lógicamente lo han hecho a costa de posibles ineficiencias. Lo que ha pasado con FFmpeg lo demuestra: hay proyectos que probablemente ganarían notables prestaciones de aprovechar la potencia del código ensamblador, y lo hacen porque como bien indican en el subreddit r/asm, con ensamblador cada byte cuenta.

En Xataka | El legendario lenguaje de programación COBOL acaba de cumplir 60 años, y es probable que cumpla otros 60 más

Inicio