__builtin_expect de GCC con probabilidad
-
11-10-2019 - |
Pregunta
__builtin_expect
de GCC puede ser utilizado por el programador para mostrar que se espera que las variantes a ser muy a menudo y que son raros. Pero __builtin_expect
sólo tienen "verdadero" y "falso" (0% o 100% de probabilidad)
Para algunos proyectos grandes es difícil variar para obtener retroalimentación de su perfil (-fprofile-arcs
), y, a veces programador conoce, lo que la probabilidad de la rama que tiene en algún punto del programa.
Es posible dar una pista para compilador que una rama tiene probabilidad> 0% y <100%?
Solución
El verdadero y falso en realidad quieren decir que "la primera variante es más probable" y "la segunda variante es más probable". No hay necesidad práctica de cualquiera de los valores distintos de estos. El compilador no será capaz de utilizar esa información.
Otros consejos
aquí :
los __builtin_expect_with_probability
(largo exp , largo c , doble probabilidad ) La función tiene misma semántica que
__builtin_expect
, pero la persona que llama proporciona la probabilidad esperada de queexp == c
. Último argumento probabilidad es un valor flotante en el rango inclusivo y 0.0f 1.0f.
No-determinismo no es un rasgo deseable para la salida del compilador, las características del lenguaje deja solos. No hay ningún beneficio real para la optimización solamente parcial preferir una rama, y ??ningún compilador Soy consciente de que puede hacer esto.