12 points par GN⁺ 2024-11-06 | 6 commentaires | Partager sur WhatsApp
  • Les langages de programmation modernes de haut niveau et les compilateurs avancés simplifient fortement le développement logiciel et en réduisent le coût, mais les inefficacités des API tendent à masquer les capacités de performance du matériel moderne
  • Selon les développeurs de FFmpeg, l’utilisation de code assembleur peut améliorer les performances de 3 à 94 fois selon la charge de travail
  • Pour accélérer certaines fonctions de FFmpeg, ils ont créé un chemin de code optimisé à l’aide du jeu d’instructions AVX-512, ce qui leur a permis d’obtenir des performances bien supérieures à l’implémentation standard
  • AVX-512 utilise des registres 512 bits, capables de traiter en une seule opération 16 FLOP en simple précision ou 8 FLOP en double précision, ce qui permet de paralléliser le traitement de grands volumes de données
  • D’après les résultats des benchmarks, ce nouveau chemin de code AVX-512 écrit à la main est nettement plus rapide que le code C de référence ainsi que que d’autres implémentations reposant sur des jeux d’instructions SIMD inférieurs comme AVX2 et SSE3
  • Cette évolution est particulièrement utile pour les utilisateurs disposant d’un matériel compatible AVX-512, qui peuvent ainsi traiter les contenus multimédias bien plus efficacement
  • Cependant, Intel a désactivé AVX-512 sur les processeurs Core de 12e, 13e et 14e génération, empêchant leurs propriétaires d’en profiter
  • À l’inverse, les CPU AMD Ryzen série 9000 disposent d’une FPU AVX-512 entièrement activée, ce qui permet à leurs propriétaires de tirer parti des avancées de FFmpeg
  • Malheureusement, en raison de la complexité et de la nature très spécifique d’AVX-512, ces optimisations restent généralement réservées aux applications où les performances sont critiques et exigent une expertise en programmation bas niveau ainsi qu’en microarchitecture processeur
    ( Ce contenu est repris de l’article de Tom's Hardware FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code )

6 commentaires

 
gurugio 2024-11-08

Pour avoir déjà brièvement travaillé sur ce type de sujet par le passé, je peux dire que le chiffre de 94 est d’abord accrocheur.
Comme cela a été mentionné dans les commentaires, l’écart de performances vient surtout de la différence entre du code scalaire et du code vectoriel.
Cependant, la plupart des codecs commerciaux sont optimisés avec du code assembleur.
Dire que « la plupart du code C est compilé en code assembleur optimal » est globalement vrai, mais pour développer un produit commercial, il faut dépasser ce « la plupart ». C’est particulièrement important dans l’embarqué.

 
GN⁺ 2024-11-06
Commentaires sur Hacker News
  • L’affirmation selon laquelle les performances ont été multipliées par 94 dans un filtre spécifique de FFmpeg est trompeuse. La plupart des utilisateurs utilisaient déjà AVX/SSE, donc aucune optimisation du code C n’était nécessaire
    • Les principaux postes de consommation CPU de FFmpeg sont l’encodage et le décodage, et cette amélioration n’a pas d’effet sur eux
  • Il ne s’agit pas d’une comparaison entre du code assembleur écrit à la main et du code qui ne l’est pas, mais d’une comparaison entre code scalaire et code vectoriel
    • En écrivant du code C avec des intrinsics AVX, on peut obtenir des gains de vitesse similaires sans recourir à l’assembleur
  • Dans certains cas, l’assembleur écrit à la main peut être avantageux
    • Les décodeurs vidéo contiennent des boucles très serrées, ce qui peut nécessiter du code assembleur pour maintenir une performance constante
  • L’équipe FFmpeg interdit l’usage des intrinsics et exige que tout le code spécifique à une plateforme soit écrit en assembleur
    • Le code assembleur sera toujours plus rapide si l’on y consacre suffisamment d’efforts, mais les intrinsics permettent d’obtenir des performances très proches avec beaucoup moins de travail
  • Le gain de 94x vient d’une optimisation de dav1d, utilisable non seulement dans FFmpeg mais aussi dans d’autres programmes
    • Une demande existe pour une optimisation RISC-V (64 bits), ce qui peut constituer une bonne opportunité pour les personnes intéressées
  • Mike Pall, de LuaJIT, a déjà expliqué les avantages de l’écriture de code assembleur
  • Dans un micro-benchmark, une fonction unique est devenue 94 fois plus rapide que le code C
  • Intel a désactivé AVX-512 sur les processeurs Core de 12e, 13e et 14e génération
    • Je n’ai pas trouvé de raison claire à cela
  • Avant de résoudre des problèmes de performance, on identifie souvent insuffisamment les goulots d’étranglement
    • La plupart du code C est compilé en code assembleur optimal
  • La hausse de performance provient non pas de l’assembleur écrit à la main, mais de l’utilisation des instructions SIMD AVX-512
    • J’aimerais voir une comparaison avec la vectorisation AVX-512 de gcc
 
maclier 2024-11-06

Nouvelle vulnérabilité Intel Downfall affectant AVX2/AVX-512, et son énorme impact sur les performances

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

 
cosine20 2024-11-08

Ah, c’est donc pour ça qu’Intel a abandonné l’AVX-512.

 
shlee1503 2024-11-10

D’après ce que je sais, la raison n’est pas tant celle-là que le fait que les cœurs E ne prennent pas en charge l’AVX-512, donc cela a été bloqué au niveau logiciel.
Les cœurs P prenaient en charge l’AVX-512 de manière non officielle.

 
cosine20 2024-11-11

Je vois. Merci de me l’avoir signalé :)