Impact des compilateurs sur les architectures CPU x86/x64

Tags : AMD; Intel;
Publié le 28/02/2012 par
Imprimer
Configurations de tests
Afin d'évaluer l'impact des compilateurs, nous avons d'abord choisi côté matériel trois processeurs issus d'architectures différentes :
  • Intel Core i7 2600k (Sandy Bridge, supporte tous les SSE et AVX, sauf le SSE 4a)
  • AMD Phenom II 975 (Deneb, support des SSE jusque 4a inclus)
  • AMD FX 8150 (Bulldozer, support de tous les SSE et AVX, SSE 4a inclus)

SSE 4a était pour rappel une extension d'AMD (quelques détails ici  et ici  sur un blog d'AMD) qui n'a jamais été reprise par Intel. Elle est en pratique très peu utilisée, sauf dans un cas que nous verrons plus tard ! Attention cependant, le Phenom II ne supporte ni le SSE 4.1, ni le SSE 4.2. S'il y a un très léger overlap entre SSE 4.1 et SSE 4a pour quelques instructions, la grande majorité ne sont pas gérées. Cela pose un certain nombre de problème avec le compilateur Intel comme nous le verrons.

Côté plateforme nous avons utilisé :
  • Carte mère Asus P8Z68-V Pro (Intel)
  • Carte mère Asus M5A97-Evo (AMD)
  • 2x2 Go de DDR3 1600 MHz
  • Radeon HD 5450
  • SSD Corsair F120
  • Windows 7 SP1

Si les configurations étaient identiques pour les trois plateformes, les tests sur le processeur FX ont été réalisés avec les patchs disponibles sur le site de Microsoft que nous avions évoqués précédemment dans cette article. Nous nous sommes concentrés exclusivement sur les performances des compilateurs disponibles sous Windows puisqu'il s'agit de la plateforme que nous utilisons régulièrement pour nos tests de performances relatifs des processeurs. Linux, BSD et les autres systèmes d'exploitation reposent sur des environnements significativement différents et si certains compilateurs peuvent être communs, les problématiques engendrées peuvent être différentes (Windows ne dispose pas réellement d'un équivalent unifié de la bibliothèque standard). Les résultats que nous vous présentons ne s'appliquent donc que sur ce système d'exploitation.

Notez que les performances relatives des trois processeurs ne nous intéressent pas réellement dans cet article (vous pouvez vous reporter au test du FX 8150 pour les voir en détail). Ce qui nous intéressera par la suite est la manière dont les compilateurs traitent ces plateformes, que ce soit les uns par rapport aux autres, ou en fonction des optimisations choisies.

Pour mesurer l'impact des compilateurs, nous avons cherché des logiciels C/C++ capables d'être compilés sous Windows à la fois sous GCC, CL et ICC, une tâche relativement ardue. Les logiciels principalement développés pour Windows dépendent très souvent des "extensions" (pour ne pas dire bizarreries) du compilateur de Microsoft. A l'inverse, la compatibilité limitée de ce compilateur avec les standards l'empêche parfois de compiler un grand nombre de programmes censés être universels.

SPEC
En plus d'un certain nombre de logiciels open source qui correspondaient à cette description mince, nous nous sommes également tournés vers SPEC. SPEC  est un organisme qui tente de réaliser des benchmarks universels qui permettent d'obtenir des mesures de performances standardisées sur de multiples systèmes. Il s'agit cependant d'un peu plus que d'un simple benchmark type 3D Mark puisqu'il propose une gestion de multiples systèmes d'exploitation et de multiples compilateurs. Ainsi, sur chaque plateforme il est possible de compiler et d'exécuter ces tests pour obtenir des scores.

Ces scores baptisés SPECint et SPECfp (nombres entiers et virgule flottantes) reposent sur un indice de performance très précis calculé à partir d'une (longue) série de tests. Pour pouvoir être validé, SPEC impose des règles strictes en matière d'options de compilations et l'on retrouve deux "normes", la norme "base" est la version traditionnelle, elle restreint l'utilisation d'optimisations jugées trop agressives et elle permet une comparaison entre différentes architectures. Un standard "peak" existe également, où tout est autorisé.

Les scores SPECint et SPECfp sont très souvent utilisés dans les présentations d'Intel (et parfois d'AMD) pour comparer une architecture à une autre. L'importance de SPEC sur les compilateurs est forte : les développeurs de compilateurs utilisent souvent les benchs inclus dans SPEC pour optimiser leurs compilateurs, mais l'impact joue également sur la manière dont les optimisations sont développées et présentées. La version "base" autorise les optimisations pour un modèle de processeur par exemple.

Pour réaliser nos tests, nous avons utilisé un certain nombre de tests individuels de SPEC, les scores que nous indiquons sont les temps d'exécution. Nous ne publions en aucun cas de scores SPECint et SPECfp dans cet article, un point qu'il est important de préciser. Visual Studio n'est pas capable de compiler une grande partie des tests inclus dans SPEC, ce dernier aura donc limité notre choix. Malgré tout, l'abondance de tests inclus dans SPEC nous a laissé une large marge.

Passons enfin aux tests !
Vos réactions

Top articles