2012-11-09 1 views
5

Esiste un modo semplice per contare rapidamente il numero di istruzioni eseguite (istruzioni x86 - quali e quante ciascuna) durante l'esecuzione di un programma C?Modo rapido per contare il numero di istruzioni eseguite in un programma C

Io uso gcc version 4.7.1 (GCC) su una macchina x86_64 GNU/Linux.

+2

Sono d'accordo con la risposta di Doness che in genere le persone desiderano definire il tempo di esecuzione per ogni funzione. Tuttavia, se vuoi veramente ottenere il conteggio esatto di ogni istruzione eseguita, devi eseguire il codice su un simulatore di istruzioni, ad esempio http://www.simplescalar.com/ – TJD

+0

Puoi approfondire ciò che stai cercando di realizzare? Su x86, le prestazioni di esecuzione delle istruzioni dipendono molto, molto più dal contesto che dalle effettive istruzioni: virtualmente tutte le istruzioni possono essere facoltativamente caricate o memorizzate, ad esempio. E le istruzioni puramente registrate per la registrazione dipenderanno in modo complesso sullo stato della pipeline delle moderne CPU. Questo non mi sembra un'informazione utile. –

+1

Perché me lo chiedi? Solitamente * profiling * significa qualcosa di diverso ... Ad esempio, compila con 'gcc -pg -Wall -O' e usa' gprof' o forse 'oprofile' !! –

risposta

3

Probabilmente un duplicato di this question

dico probabilmente perché avete chiesto le istruzioni assembler, ma che domanda gestisce il profiling di livello C di codice.

La mia domanda per voi sarebbe, tuttavia: perché vorreste profilare le istruzioni macchina effettive eseguite? Come primo problema, questo sarebbe diverso tra vari compilatori e le loro impostazioni di ottimizzazione. Come un problema più pratico, cosa potresti fare effettivamente con queste informazioni? Se stai cercando/ottimizzando i colli di bottiglia, il codice profiler è quello che stai cercando.

Qui potrei perdersi qualcosa di importante.

+0

Il numero di istruzioni della CPU * eseguito * sarebbe un modo semplice per confrontare gli algoritmi senza preoccuparsi di singhiozzo o di competere per risorse con altri programmi, indipendentemente dalla potenza di elaborazione anche se dipende ancora dal set di istruzioni. – mpen

+1

@mpen: non necessariamente, ad es.se si dispone di un algoritmo che utilizza tabelle di ricerca di grandi dimensioni e un altro che fa la stessa cosa utilizzando un approccio più computazionale, allora il primo potrebbe avere molte più istruzioni di caricamento, ognuna delle quali potrebbe potenzialmente bloccarsi per> 100 cicli a causa di mancanze della cache. Allo stesso modo potresti avere un algoritmo che utilizza molte istruzioni costose, ad es. 'FSQRT', e un altro algoritmo che evita istruzioni così costose e magari usa un paio di aggiunte/multipli - il secondo potrebbe essere più veloce anche se esegue più istruzioni. –

1

È possibile conteggiare facilmente il numero di istruzioni eseguite utilizzando Hardware Performance Counter (HPC). Per accedere a HPC, è necessaria un'interfaccia. Ti ho consigliato di utilizzare l'API delle prestazioni PAPI .