Dans quel cas un tel réordonnancement se justifie-t-il ?
Le ré-ordonnancement est une optimisation importante du compilateur. Un truc important est de générer du code qui minimise les dépendances immédiates entre deux instructions. Par exemple (si R0 et R1 sont des registres) :
charger 12 dans R0
charger 42 dans R1
utiliser R0
utiliser R1
Ici l'instruction « charger 42 dans R1 » peut s'exécuter alors que « charger 12 dans R0 » n'est pas terminée (exécution pipelinée). Par contre, si on avait écrit :
charger 12 dans R0
utiliser R0
charger 42 dans R1
utiliser R1
alors le processeur serait obligé d'attendre la fin des instructions « charger » avant les instructions « utiliser » correspondantes. Les performances seraient moins bonnes pour le même comportement.
[^] # Re: Réordonnancement étrange...
Posté par Matthieu Moy (site web personnel) . En réponse à la dépêche De la nécessité d’adopter les opérations atomiques C11 ?. Évalué à 6.
Le ré-ordonnancement est une optimisation importante du compilateur. Un truc important est de générer du code qui minimise les dépendances immédiates entre deux instructions. Par exemple (si R0 et R1 sont des registres) :
Ici l'instruction « charger 42 dans R1 » peut s'exécuter alors que « charger 12 dans R0 » n'est pas terminée (exécution pipelinée). Par contre, si on avait écrit :
alors le processeur serait obligé d'attendre la fin des instructions « charger » avant les instructions « utiliser » correspondantes. Les performances seraient moins bonnes pour le même comportement.