Gcc n'aime pas les piles (gcj a un backend spécial) or le code x87 utilise une pile. Gcc utilise une instruction spécial qui va chercher les bonnes valeur dans la pile plutot que de scheduler les opérations pour une pile.
L'athlon dispose de 3 décodeur et cette instruction est executé "à coût nul". Le P4 ne dispose que d'un seul décodeur et perd donc un coup de clock en comparaison de l'Athlon (la vitesse n'est pas divisé par 2 grace au trace cache (program cache situé après le décodeur) qui doit faire son boulot ensuite).
Icc utilise un vrai scheduler pour pile d'où les différences de perf. Maintenant essayer gcc avec les options -msse pour utiliser ( et/ou -msse2 pour le P4 ?) les instructions SSE en scalair qui utilise des registres ou gcc sera plus à l'aise. (Utiliser aussi le nouveau allocateur de registre option -fra ou un truc du genre) -mx87,sse existe en version expérimental, cela utilise les 2 styles d'instructions. Cela devrait donner le code le plus rapide.
-ffast-math n'est pas recommandé en bench, cela peut changer le comportement du programme.
[^] # Re: Comparatif Intel C++ 7.0 / Gcc 3.2.1
Posté par Nicolas Boulay (site web personnel) . En réponse à la dépêche Comparatif Intel C++ 7.0 / Gcc 3.2.1. Évalué à 2.
L'athlon dispose de 3 décodeur et cette instruction est executé "à coût nul". Le P4 ne dispose que d'un seul décodeur et perd donc un coup de clock en comparaison de l'Athlon (la vitesse n'est pas divisé par 2 grace au trace cache (program cache situé après le décodeur) qui doit faire son boulot ensuite).
Icc utilise un vrai scheduler pour pile d'où les différences de perf. Maintenant essayer gcc avec les options -msse pour utiliser ( et/ou -msse2 pour le P4 ?) les instructions SSE en scalair qui utilise des registres ou gcc sera plus à l'aise. (Utiliser aussi le nouveau allocateur de registre option -fra ou un truc du genre) -mx87,sse existe en version expérimental, cela utilise les 2 styles d'instructions. Cela devrait donner le code le plus rapide.
-ffast-math n'est pas recommandé en bench, cela peut changer le comportement du programme.
"La première sécurité est la liberté"