Domanda

ho bisogno di migliorare il throughput del sistema.

Il ciclo abituale di ottimizzazione è stato fatto e abbiamo già raggiunto 1.5X migliore rendimento.

Ora sto cominciando a chiedermi se posso utilizzare l'uscita cachegrind per migliorare il throughput del sistema.

Qualcuno può punto me come iniziare questo?

Quello che ho capito è che abbiamo bisogno di garantire più di frequente dati utilizzati dovrebbero essere mantenute abbastanza piccolo in modo che rimanga nella cache L1 e la prossima serie di dati dovrebbe andare bene nella L2.

E 'questa la giusta direzione sto prendendo?

È stato utile?

Soluzione

`s vero che la produzione cachegrind di per sé non dà troppe informazioni come fare per ottimizzare il codice. Uno ha bisogno di sapere come interpretare e quello che dici sui dati montaggio in L1 e L2 è davvero la giusta direzione.

Per comprendere appieno come gli schemi di accesso alla memoria influenzano le prestazioni, vi consiglio di leggere un eccellente carta «Quello che ogni programmatore dovrebbero sapere su memoria " da Ulrich Drepper, libc manutentore GNU.

Altri suggerimenti

Se hai problemi verificando l'output cachegrind, guardare in KCachegrind (dovrebbe essere disponibile nella vostra distro di scelta). Io lo uso e lo trovo molto utile.

il Cachegrind documentazione , i dati forniti a voi da cachegrind sono il numero di cache miss per una data parte del codice. Hai bisogno di sapere su come le cache funzionano su architettura ci si rivolge in modo da sapere come risolvere il codice. In pratica questo significa rendere più piccolo di dati o cambiare il modello di accesso di alcuni dati in modo che i dati memorizzati nella cache è ancora nella cache. Tuttavia è necessario capire i dati del tuo programma e accesso ai dati prima di poter agire sulle informazioni. Come dice il manuale,

  

In breve, Cachegrind posso dirvi dove alcuni dei colli di bottiglia nel codice sono, ma non si può dire come risolverli. Si deve lavorare che per te stesso. Ma almeno hai le informazioni!

1.5x è un bel aumento di velocità. Vuol dire che hai trovato qualcosa che ha preso il 33% del tempo che si potrebbe sbarazzarsi di. Scommetto che si può fare di più, anche prima di scendere a questioni di basso livello come la cache di memoria dati. Questo è un esempio di come . In sostanza, si potrebbe avere ulteriori problemi di prestazioni (e le opportunità di aumento di velocità) che non erano di grandi dimensioni prima, come il 25% dicono. Bene, con l'aumento di velocità 1.5x, che il 25% è ora del 37,5%, quindi è "vale più" di quanto non fosse. Spesso un tale problema si presenta sotto forma di una funzione chiamata di mid-stack che richiede lavoro che, una volta che sai quanto costa, si può decidere non è completamente necessario. Dal momento che in realtà non KCachegrind individuare questi, non si può capire si tratta di un problema.

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