Impact des compilateurs sur les architectures CPU x86/x64

Tags : AMD; Intel;
Publié le 28/02/2012 par
Imprimer
x264

Langage : C++
Type de charge : Entiers
Multithreadé : Oui
Le logiciel de compression vidéo x264 que nous utilisons régulièrement dans nos articles est assez particulier. Il intègre en effet un assez grand nombre d'optimisations assembleurs. Les auteurs ne se contentent pas du x86 d'ailleurs puisque l'on retrouvera par exemple des optimisations utilisant le jeu d'instruction SIMD NEON d'ARM. Il est également possible de compiler le logiciel en désactivant toutes les optimisations assembleurs. L'occasion de vérifier l'impact de ce dernier et voir si les optimisations des compilateurs peuvent faire quoique ce soit pour compenser cette perte.

Nous utilisons mingw/gcc uniquement pour ce test (les autres compilateurs ne sont pas directement supportés, des patchs et forks existent cependant), dans une version légèrement différente de celle utilisée jusqu'ici. Gcc est ici en version 4.6.2. i686 représente ici le profil de base, noasm indique que nous avons désactivé les optimisations assembleurs lors de la compilation.


[ Core i7 2600k ]   [ FX-8150 ]  [ Phenom II X4 975 ]
Passez la souris sur un modèle de processeur pour afficher ses résultats

Premier point à noter, une build compilée via gcc avec les optimisations SSE4a (ce qui est le cas des profils AMD) sera détectée comme telle au lancement par x264 qui stoppera son exécution. Seul le FX, disposant à la fois d'AVX et de SSE4a peut lancer toutes les versions compilées.

Ensuite, si l'on en doutait encore, un code rédigé en assembleur reste la voix royale pour obtenir un maximum de performances. Les versions avec assembleurs arrivent cependant à profiter très légèrement des profils corei7/corei7-avx pour le Core i7-2600k, et bdver1 (et surtout) barcelona pour les processeurs AMD. De manière plus surprenante ces optimisations sont généralement défavorables sur le code dépourvu d'assembleur. Notez enfin que forcer l'utilisation d'instructions AVX 128 bits (ce qui est indiqué par le p128) apporte un impact, ici très léger cependant.

Bien entendu ces résultats ne sont pas directement comparables aux autres que nous avons pu vous présenter, mais ils permettent d'illustrer que si le compilateur reste important, un développeur pourra toujours optimiser de façon forte un code en C/C++.
Vos réactions

Top articles