12 puntos por GN⁺ 2024-11-06 | 6 comentarios | Compartir por WhatsApp
  • Los lenguajes de programación modernos de alto nivel y los compiladores avanzados simplifican enormemente el desarrollo de software y reducen costos, pero por las ineficiencias de las API tienden a ocultar las capacidades de rendimiento del hardware moderno
  • Según los desarrolladores de FFmpeg, usar código ensamblador puede mejorar el rendimiento entre 3 y 94 veces, dependiendo de la carga de trabajo
  • Para acelerar funciones específicas dentro de FFmpeg, crearon rutas de código optimizadas usando el conjunto de instrucciones AVX-512, y lograron un rendimiento mucho más rápido que la implementación estándar
  • AVX-512 usa registros de 512 bits, por lo que puede procesar 16 FLOP de precisión simple u 8 FLOP de doble precisión en una sola operación, lo que permite procesar grandes volúmenes de datos en paralelo
  • Según los resultados de benchmarking, la nueva ruta de código AVX-512 escrita a mano es considerablemente más rápida que otras implementaciones, incluido el código base en C y conjuntos de instrucciones SIMD más limitados como AVX2 y SSE3
  • Este desarrollo es especialmente útil para usuarios que ejecutan hardware compatible con AVX-512, ya que pueden procesar contenido multimedia de forma mucho más eficiente
  • Sin embargo, Intel desactivó AVX-512 en los procesadores Core de 12.ª, 13.ª y 14.ª generación, por lo que los propietarios de esos CPU no pueden usarlo
  • En cambio, los CPU Ryzen 9000 Series de AMD cuentan con una FPU AVX-512 completamente habilitada, por lo que los propietarios de estos procesadores pueden aprovechar las mejoras de FFmpeg
  • Lamentablemente, debido a la complejidad y especificidad de AVX-512, estas optimizaciones por lo general se limitan a aplicaciones donde el rendimiento es crítico y requieren conocimientos especializados de programación de bajo nivel y de microarquitectura de procesadores
    ( Este contenido fue tomado de Tom's Hardware: FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code )

6 comentarios

 
gurugio 2024-11-08

Como alguien que antes trabajó brevemente en algo relacionado, diría que ese 94 de entrada es clickbait.
Como se mencionó en los comentarios, la gran diferencia de rendimiento se debe a la diferencia entre código escalar y vectorial.
Pero la mayoría de los códecs comerciales se optimizan con programación en ensamblador.
Es cierto que decir que "la mayor parte del código en C se compila a código ensamblador óptimo" no está mal, pero para desarrollar productos comerciales hay que estar por encima de ese "la mayor parte". En especial, esto es aún más importante en el mundo embebido.

 
GN⁺ 2024-11-06
Comentarios de Hacker News
  • La afirmación de que el rendimiento mejoró 94 veces en un filtro específico de FFmpeg es engañosa. La mayoría de los usuarios ya estaban usando AVX/SSE, por lo que no hacía falta optimizar el código en C
    • Los principales consumidores de CPU en FFmpeg son la codificación y la decodificación, y esta mejora no afecta eso
  • No es una comparación entre código ensamblador escrito a mano y código que no lo está, sino entre código escalar y código vectorial
    • Si se escribe el código en C usando intrinsics de AVX, se puede obtener una mejora de velocidad similar incluso sin código ensamblador
  • En algunos casos, el código ensamblador escrito a mano puede ser ventajoso
    • Los decodificadores de video incluyen bucles muy ajustados, así que se necesita código ensamblador para mantener la consistencia del rendimiento
  • El equipo de FFmpeg prohíbe el uso de intrinsics y exige que todo el código específico de cada plataforma se escriba en ensamblador
    • El código ensamblador siempre puede ser más rápido si se le dedica suficiente esfuerzo, pero con intrinsics se puede lograr un rendimiento muy cercano con mucho menos esfuerzo
  • La mejora de 94 veces es una optimización de dav1d, y puede usarse no solo en FFmpeg sino también en otros programas
    • Hay una solicitud de optimización para RISC-V (64 bits), y es una buena oportunidad para quienes estén interesados
  • Mike Pall de LuaJIT ya ha explicado las ventajas de escribir código ensamblador
  • En un microbenchmark, una sola función fue 94 veces más rápida que el código en C
  • Intel deshabilitó AVX-512 en los procesadores Core de 12.ª, 13.ª y 14.ª generación
    • No se ha encontrado una razón clara para ello
  • Muchas veces no se hace suficiente trabajo para identificar los cuellos de botella antes de intentar resolver problemas de rendimiento
    • La mayor parte del código en C se compila a un ensamblador óptimo
  • La causa de la mejora de rendimiento no es el código ensamblador escrito a mano, sino el uso de instrucciones SIMD AVX-512
    • Me gustaría verlo comparado con la vectorización AVX-512 de gcc
 
maclier 2024-11-06

Nueva vulnerabilidad Downfall de Intel en AVX2/AVX-512 y su enorme impacto en el rendimiento

https://tuxcare.com/ko/blog/…

 
cosine20 2024-11-08

Ah, con razón Intel eliminó AVX-512.

 
shlee1503 2024-11-10

Según entiendo, más que por esa razón, como los E-cores no son compatibles con AVX-512, creo que lo bloquearon por software.
Los P-cores sí tenían compatibilidad no oficial con AVX-512.

 
cosine20 2024-11-11

Así es. Gracias por avisar :)