Esiste un modo portatile per eseguire suggerimenti di previsione ramo? Si consideri il seguente esempio:Suggerimenti di previsione ramo portatile
if (unlikely_condition) {
/* ..A.. */
} else {
/* ..B.. */
}
È questo diverso che farlo:
if (!unlikely_condition) {
/* ..B.. */
} else {
/* ..A.. */
}
O è l'unico modo per utilizzare i parametri specifici del compilatore? (ad es. __builtin_expect su GCC)
I compilatori considereranno le condizioni di if
in modo diverso in base all'ordine delle condizioni?
Mi chiedo se questo potrebbe essere qualcosa C++ 0x attributi da applicare alle condizioni per 'if'? Mi piace 'if ([[improbabile]] unlikely_condition) {...}'? Attualmente la sintassi non lo consente. Tuttavia * consente * se ([[improbabile]] bool b = ...) {} '. Forse si potrebbe abusare di questo :) –
Il codice GNU contiene una quantità ridicola di 'se (probabile (...))' junk nel codice completamente non performante, e IMO questo è davvero pessimo. Per prima cosa, non si legge naturalmente in inglese - suona come "se questa condizione è probabile che sia vera" invece di "se questa condizione è vera, che probabilmente è". E per un altro, è solo confusione. A meno che non siano presenti molti condizionali critici per le prestazioni che non verranno compilati con 'cmov' o simili, ignorare semplicemente l'hint di previsione dei rami. –
@R .. Penso di capire perché il kernel di Linux è pieno di 'if (improbabile (...))'. Preferiscono le uscite anticipate che semplificano il flusso di codice da seguire. Se non lo facessero, la previsione del ramo statico fallirebbe sempre. –