Oui, mais cela n'aura aucun effet. Les Exceptions sont plus âgés (obsolète) architectures pré Netburst, et même alors, il ne veut pas faire quelque chose de mesurable.
Il y a une branche "hint" opcode Intel introduit avec l'architecture Netburst, et un défaut statique de la direction de la prévision pour le froid sauts (en arrière prédit pris, avant prédit non pris) sur certaines architectures plus anciennes. GCC met en œuvre avec l' __builtin_expect (x, prediction)
, où la prédiction est généralement de 0 ou 1.
L'opcode émis par le compilateur est ignoré à tous les nouveaux processeur architecures (>= Core 2). Le petit coin de cas où cela ne fait que quelque chose est le cas du froid sauter sur l'ancienne architecture Netburst. Intel recommande maintenant de ne pas utiliser la statique de la direction générale des conseils, probablement parce qu'ils considèrent que l'augmentation de la taille du code plus nocif que le possible marginal de la vitesse.
En plus de ce qui est inutile, direction générale de l'indice pour le prédicteur, __builtin_expect
a son utilisation, le compilateur peut réorganiser le code pour améliorer l'utilisation du cache ou économiser de la mémoire.
Il y a de multiples raisons, il ne fonctionne pas comme prévu.
- Le processeur peut prévoir de petites boucles (n<64) parfaitement.
- Le processeur est capable de prédire les petits motifs répétitifs (n~7) parfaitement.
- Le processeur lui-même pouvez estimer la probabilité d'une branche au cours de l'exécution de mieux que le compilateur/programmeur lors de la compilation.
- La prévisibilité (= probabilité qu'une branche obtiendrez prédit correctement) d'une branche est beaucoup plus important que la probabilité que la direction générale est prise. Malheureusement, cela est fortement dépendantes de l'architecture, et de prédire la prévisibilité de la branche est notoirement difficile.
Lire plus sur l'intérieur des œuvres de la direction de la prévision au Agner les Brumes de manuels.
Voir aussi la gcc liste de diffusion.