Les extensions de vecteurs avancés, intégrées dans les architectures x86 par Intel et AMD, promettent d’importantes améliorations de performance dans le traitement vidéo. Le dernier rapport du projet FFmpeg évoque des gains pouvant atteindre jusqu’à 94 fois, grâce à l’optimisation des instructions SIMD et du code assembleur.
Les extensions de vecteurs avancés (AVX) représentent un type d’extension « single instruction, multiple data » au sein de l’architecture d’instructions x86, mises en œuvre par Intel et AMD dans les processeurs modernes. Ces instructions peuvent considérablement améliorer les charges de travail de traitement parallèle, surtout lorsqu’elles sont associées à des registres de 512 bits et d’autres fonctionnalités avancées disponibles dans le jeu d’instructions AVX-512.
Récemment, l’équipe de FFmpeg a souligné comment les instructions AVX-512 peuvent offrir un gain de performance significatif dans les charges de travail de traitement vidéo. Selon une slide présentée par l’un des développeurs, l’optimisation du code assembleur « écrit à la main » tirant parti de ces instructions SIMD peut accélérer les routines de décodage vidéo de trois à 94 fois.
Bien qu’aucun détail n’ait été fourni concernant le processeur ou le système utilisé pour les tests de performance, la technologie AVX-512 a fait son apparition pour la première fois dans la série de processeurs Intel Xeon Phi x200 (Knights Landing) en 2016. Les gains de performance substantiels sont dus à la combinaison d’instructions vectorielles AVX-512 avec un code assembleur hautement optimisé, bien que les instructions AVX aient été conçues dès le départ pour améliorer le traitement parallèle SIMD.
FFmpeg est un logiciel open source et gratuit qui offre une suite complète de bibliothèques et d’outils pour manipuler les flux audio et vidéo – un véritable couteau suisse du multimédia, utilisé par des lecteurs multimédias populaires tels que VLC et par de grandes entreprises comme YouTube. L’équipe centrale de FFmpeg supervise le projet, tandis qu’une communauté de bénévoles contribue au code et aux correctifs.
A 94x speed improvement demonstrated using handwritten assembly pic.twitter.com/FI28GOONQA
– FFmpeg (@FFmpeg) Novembre 2, 2024
Actuellement, FFmpeg s’appuie sur le langage assembleur pour environ huit pour cent de son code, selon les développeurs, laissant ainsi de la place pour des améliorations de performance. L’assembleur est un langage de bas niveau que peu de programmeurs maîtrisent aujourd’hui, surtout que l’industrie logicielle privilégie désormais des langages de haut niveau et accessibles, comme Python.
Cependant, des développeurs qualifiés cherchent toujours à maximiser les performances sur le hardware le plus récent. FFmpeg inclut des routines de décodage personnalisées « écrites à la main » pour les processeurs x86 et ARM, même si certains acteurs de l’industrie logicielle espèrent voir l’AVX-512 disparaître « dans d’atroces souffrances ».
Récemment, Intel a présenté l’AVX10, une ISA réimaginée qui standardise les instructions AVX-512 à travers toutes les architectures de processeurs x86 et types de cœurs. Cependant, Intel a créé la surprise en désactivant le support AVX-512 au niveau du firmware sur les processeurs Core de 12e génération et ultérieurs, retirant effectivement l’ISA SIMD de ses puces grand public.
