supponga Ho un'unità di compilazione costituito da tre funzioni, A, B, e C. Una volta viene invocato da una funzione esterna all'unità di compilazione (ad esempio è un punto di ingresso o callback); B è invocato molte volte da A (ad esempio è invocato in un ciclo stretto); C viene invocato una volta per ogni invocazione di B (ad esempio è una funzione di libreria).semantica di GCC attributo caldo
L'intero percorso attraverso A (passante per B e C) è critica per le prestazioni, anche se le prestazioni di un sé non è critica (come maggior parte del tempo è trascorso in B e C).
Qual è l'insieme minimo di funzioni che è necessario annotare con __attribute__ ((hot))
per eseguire un'ottimizzazione più aggressiva di questo percorso? Supponiamo di non poter utilizzare -fprofile-generate
.
Equivalentemente: __attribute__ ((hot))
significa "Ottimizza il corpo di questa funzione", "Ottimizza le chiamate a questa funzione", "Ottimizza tutte le chiamate discendenti che questa funzione effettua" o una combinazione di queste?
La pagina info di GCC non affronta in modo chiaro a queste domande.
'__attribute__ ((caldo))' possono ottenere voi qualcosa, ma potresti ottenere risultati migliori dal primo rendendo B e C 'statici in linea' e ottimizzando con' -O3'. – twalberg
Suppongo che questi passi siano già stati presi. –