__builtin_expect da GCC con probabilità
-
11-10-2019 - |
Domanda
__builtin_expect
da GCC può essere utilizzato dai programmatori per mostrare che varianti dovrebbero essere molto spesso e che sono rari. Ma __builtin_expect
hanno solo "vero" e "falso" (0% o 100% di probabilità)
Per alcuni grandi progetti è variare difficile ottenere profilo di feedback (-fprofile-arcs
), e, talvolta, il programmatore sa, che cosa probabilità di filiale che hanno in un certo punto del programma.
E 'possibile dare un suggerimento al compilatore che un ramo hanno probabilità> 0% e <100%?
Soluzione
Vero e falso veramente dire che "la prima variante è più probabile" e "la seconda variante è più probabile". Non c'è necessità pratica per tutti i valori diversi da questi. Il compilatore non sarà in grado di utilizzare tali informazioni.
Altri suggerimenti
qui :
molto __builtin_expect_with_probability
(lunga exp , lungo c , doppio probabilità ) La funzione ha stessa semantica
__builtin_expect
, ma fornisce chiamante la probabilità attesa cheexp == c
. Ultimo argomento probabilità è un valore che galleggia nel 0.0f gamma inclusivo e 1.0f.
Non il determinismo non è una caratteristica desiderabile per l'output del compilatore, lasciate caratteristiche del linguaggio da solo. Non v'è alcun reale beneficio per l'ottimizzazione solo parziale preferendo un ramo, e nessun compilatore io sappia può fare questo.