Les développeurs de FFmpeg revendiquent une augmentation de vitesse de 94x en utilisant le code manuscrit AVX-512

Publié le 06 novembre 2024 par Zaebos @MetatroneFR

Le traitement parallèle sur les ordinateurs x86 modernes peut vraiment faire des merveilles

Dans le contexte : Les extensions vectorielles avancées sont un type d'extension « instruction unique, données multiples » de l'architecture du jeu d'instructions x86, implémentée par Intel et AMD dans les processeurs modernes. Ces instructions peuvent améliorer considérablement les charges de travail de traitement parallèle, en particulier lorsqu'elles sont utilisées avec des registres 512 bits et d'autres fonctionnalités avancées disponibles dans le jeu d'instructions AVX-512.

L'équipe FFmpeg a récemment souligné comment les instructions AVX-512 peuvent améliorer considérablement les performances des charges de travail de traitement vidéo. Selon une diapositive présentée par l'un des développeurs, un « assemblage manuscrit » optimisé exploitant 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 sur le processeur ou le système utilisé pour l'analyse comparative, la technologie AVX-512 est apparue pour la première fois dans la série de processeurs Intel Xeon Phi x200 (Knights Landing) en 2016. Les gains de performances substantiels proviennent de la combinaison d'instructions vectorielles AVX-512 avec des code assembleur optimisé, bien que les instructions AVX aient été initialement conçues pour améliorer le traitement parallèle SIMD dès le départ.

FFmpeg est un progiciel gratuit et open source qui offre une suite complète de bibliothèques et d'outils pour gérer les flux audio et vidéo – un véritable couteau suisse du multimédia, utilisé par les lecteurs multimédias populaires comme VLC et de grandes entreprises comme YouTube. L'équipe principale de FFmpeg supervise le projet, tandis qu'une communauté de bénévoles contribue au code et aux correctifs.

Une amélioration de la vitesse 94x démontrée à l'aide d'un assemblage manuscrit pic.twitter.com/FI28GOONQA

– FFmpeg (@FFmpeg) 2 novembre 2024

FFmpeg s'appuie actuellement sur le langage assembleur pour environ huit pour cent de sa base de code, ont déclaré les développeurs, ce qui laisse beaucoup de place à l'amélioration des performances. L'assembleur est un langage de bas niveau dans lequel peu de programmeurs se spécialisent aujourd'hui, d'autant plus qu'une grande partie de l'industrie du logiciel donne désormais la priorité aux langages de haut niveau et accessibles comme Python.

Pourtant, les développeurs qualifiés sont toujours désireux d’optimiser les performances sur le matériel le plus récent. FFmpeg inclut des routines de décodage « manuscrites » personnalisées pour les processeurs x86 et ARM, même si certains dans l'industrie du logiciel souhaitent que l'AVX-512 meure « d'une mort douloureuse ».

Récemment, Intel a présenté AVX10, un ISA réinventé qui standardise les instructions AVX-512 sur toutes les architectures de processeur x86 et tous les types de cœurs. Cependant, Intel a fait des vagues en désactivant la prise en charge de l'AVX-512 au niveau du micrologiciel sur les processeurs Core de 12e génération et les modèles ultérieurs, supprimant ainsi le SIMD ISA de ses puces grand public.