Sto provando a profilare (con Callgrind) una parte specifica del mio codice rimuovendo rumore e computazione che non mi interessa. Ecco un esempio di quello che voglio fare:Callgrind: profilo di una parte specifica del mio codice
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
//Method to be profiled with these data
//Post operation on the data
}
mio caso d'uso è un test di regressione, voglio fare in modo che il metodo in questione è ancora abbastanza veloce (si parla di meno del 10% in più istruzioni dall'ultima implementazione). Ecco perché mi piacerebbe avere l'output più pulito di Callgrind. (Ho bisogno di un ciclo for in modo da avere una quantità significativa di dati trattati in modo da avere una buona stima del comportamento del metodo che voglio al profilo)
Il mio primo tentativo è stato quello di modificare il codice a:
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_START_INSTRUMENTATION;
//Method to be profiled with these data
CALLGRIND_STOP_INSTRUMENTATION;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
Aggiunta delle macro Callgrind per controllare la strumentazione. Ho anche aggiunto il --instr-atstart = no opzioni per essere sicuro di profilare solo la parte del codice che voglio ...
Sfortunatamente con questa configurazione quando inizio a lanciare il mio eseguibile con callgrind, non finisce mai ... Non è una questione di lentezza, perché una strumentazione completa dura meno di un minuto.
Ho anche provato
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_TOGGLE_COLLECT;
//Method to be profiled with these data
CALLGRIND_TOGGLE_COLLECT;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
(o = opzione "myMethod" --toggle-collect) Ma Callgrind mi ha restituito un log senza alcuna chiamata (KCachegrind è bianco come la neve :(e dice a zero istruzioni ...)
ho usato le macro/opzioni correttamente? Qualsiasi idea di che cosa ho bisogno di cambiare al fine di ottenere il risultato atteso?
in modo da non avviare/interrompere la strumentazione? – Paschalis
@Paschalis start/stop creerà nuovo dump ogni volta che si chiama stop. Se si desidera ottenere l'aggregazione in un singolo report, l'interruttore sembra essere la strada da percorrere (in pratica si tratta semplicemente di attivare la strumentazione attiva/inattiva). – joetde
grazie per la risposta @joetde. Ho chiesto perché sto affrontando un problema in cui le callback/macro di callgrind o qualsiasi altro strumento non sembrano essere mai chiamate. Altro [qui] (http://goo.gl/08OM3c)! – Paschalis