Domanda

Qualcuno conosce questo funzionalità del compilatore?Sembra GCC supporto.Come funziona?Qual è il potenziale di guadagno?In questo caso va bene?Cicli interni?

(questa domanda è specifica, non sull'ottimizzazione in generale, grazie)

È stato utile?

Soluzione

Funziona inserendo codice aggiuntivo per contare il numero di volte che ogni codepath è preso.Quando si compila una seconda volta il compilatore utilizza le conoscenze acquisite circa l'esecuzione del programma che si può solo immaginare prima.Ci sono un paio di cose PGO può lavorare verso:

  • Decidere quali funzioni devono essere sostituite o non a seconda di come spesso vengono chiamati.
  • Decidere come posizionare i suggerimenti su quale ramo di un "se" dichiarazione deve essere previsto in base alla percentuale di chiamate in un modo o nell'altro.
  • Decidere come ottimizzare i cicli in base a quante iterazioni per ottenere preso ogni volta che il ciclo viene chiamato.

Non sai mai quanto queste cose possono aiutare fino a quando si prova.

Altri suggerimenti

PGO dà circa un 5% di incremento di velocità durante la compilazione di x264, il progetto io lavoro, e non hanno un built-in sistema (fare fprofiled).Il suo un bel gratuito aumentare la velocità in alcuni casi, e probabilmente aiuta di più in applicazioni che, a differenza di x264, sono meno fatto manoscritte di montaggio.

Jason consiglio è di proprio su.I migliori speedups si sta andando ottenere provengono da "scoprire" che si lascia un O(n2) algoritmo di scivolare in un ciclo interno da qualche parte, o che è possibile memorizzare nella cache di alcuni calcoli al di fuori di costosi funzioni.

Rispetto al micro-ottimizzazioni che PGO può innescare, questi sono i grandi vincitori.Una volta che hai fatto che a livello di ottimizzazione PGO potrebbe essere in grado di aiutare.Non abbiamo mai avuto molta fortuna con esso, però, il costo della strumentazione è stata tale che la nostra applicazione diventato unusably lento (di diversi ordini di grandezza).

Mi piace usare la Intel VTune come profiler, principalmente perché non è invasivo rispetto alla strumentazione profiler che cambiare il comportamento troppo.

La cosa divertente di ottimizzazione è che il guadagno in velocità si trovano in luoghi improbabili.

È anche il motivo per cui avete bisogno di un profiler, piuttosto che indovinare dove la velocità di problemi.

Io consiglio di partire con un profiler (gperf se stai usando GCC) e iniziare a frugare i risultati dell'esecuzione l'applicazione attraverso alcune operazioni normali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top