Question

__builtin_expect de GCC peut être utilisé par un programmeur pour montrer quelles variantes devraient être très souvent et qui sont rares. Mais __builtin_expect ont seulement "vrai" et "faux" (0% ou 100% de probabilité)

Pour certains grands projets, il est difficile d'obtenir varient commentaires de profil (-fprofile-arcs), et parfois programmeur ne sait, quelle probabilité de la branche, il a en quelque point de programme.

Il est possible de donner une indication au compilateur qu'une branche ont une probabilité> 0% et <100%?

Était-ce utile?

La solution

Vrai et faux signifie vraiment que « la première variante est plus probable » et « la deuxième variante est plus probable ». Il n'y a pas besoin pratique pour toutes les valeurs autres que celles-ci. Le compilateur ne sera pas en mesure d'utiliser cette information.

Autres conseils

De :

  

long __builtin_expect_with_probability

     

(longue exp longue c , double probabilité ) La fonction a même sémantique que __builtin_expect, mais appelant fournit la probabilité prévue que exp == c . Dernier argument probabilité est une valeur flottante dans la gamme inclusive 0.0f et 1.0f.

Non-déterminisme est pas un trait souhaitable pour la sortie du compilateur, sans parler des caractéristiques linguistiques. Il n'y a pas de véritable avantage pour que l'optimisation partielle préférant une branche, et aucun compilateur je connais peut le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top