Existe-t-il un moyen portable de faire des conseils de prédiction de branchement? Prenons l'exemple suivant:Conseils de prédiction de branchement portable
if (unlikely_condition) {
/* ..A.. */
} else {
/* ..B.. */
}
Est-ce différent que de le faire:
if (!unlikely_condition) {
/* ..B.. */
} else {
/* ..A.. */
}
Ou est la seule façon d'utiliser des notes spécifiques du compilateur? (par exemple __builtin_expect on GCC)
Les compilateurs traiteront-ils les conditions if
différemment en fonction de l'ordre des conditions?
Je me demande si cela pourrait être quelque chose C++ 0x attributs à coller sur les conditions de 'if'? Comme 'if ([[improbable]] probability_condition) {...}'? Actuellement, la syntaxe ne le permet pas. Il * autorise * cependant 'if ([[improbable]] bool b = ...) {}'. Peut-être que l'on pourrait en abuser :) –
Le code GNU contient une quantité ridicule de courrier indésirable 'if (probable (...))' dans un code complètement non critique, et c'est vraiment mauvais pour l'OMI. D'une part, il ne se lit pas naturellement en anglais - il semble que «si cette condition est susceptible d'être vraie» au lieu de «si cette condition est vraie, ce qui est probable». Et pour un autre, c'est juste un fouillis. Sauf si vous avez beaucoup de conditions critiques de performance qui ne seront pas compilées à 'cmov' ou similaire, ignorez simplement les indices de prédiction de branche. –
@R .. Je pense que je comprends pourquoi le noyau Linux est jonché de 'if (improbable (...))'. Ils préfèrent les sorties anticipées qui facilitent le suivi du code. Si elles ne le faisaient pas, la prédiction de branchement statique échouerait toujours. –