mi sono imbattuto perf analisi sul seguente programma vuoto,perf stat dà numero diverso di istruzione per ogni corsa
#include <stdio.h>
int main() {
}
Dopo la compilazione e l'esecuzione stat perf ./a.out ho ricevuto il seguente output dicendo (insieme a altri dati come il numero di cicli, task-orologio, ecc):
418,869 instructions # 0.87 insns per cycle
il numero di istruzioni modifiche nel corso di ogni 'perf' analisi sullo stesso elfo.
La mia vera necessità è trovare il numero di istruzioni in una particolare funzione che ho scritto. Quindi sto sottraendo il numero sopra dal numero di istruzioni nel nuovo programma (potrei contare il numero di riga in program.s creato usando il tag -S in gcc ma sono confuso dopo aver osservato il comportamento perf)
Perché il numero di istruzioni non è coerente, per essere esatti?
Aggiornamento ho seguito l'esempio dato in man page per usare perf_event_open() in C
perf_event_open() mi ha fornito un conteggio esatto pari al numero di istruzioni nel file .s. perf stat -e instructions: u a.out dà anche un numero di conteggio diverso ogni volta, ma la variazione non è grande come nello scenario spiegato nella domanda. – Vignesh
utilizzando perf_event_open hai esattamente nkwo quello che misuri. Per la (piccola) variazione rimanente anche dopo aver aggiunto: u Immagino che molte cose siano ancora fatte nello spazio utente prima che venga chiamata la funzione principale nel tuo programma, e qui c'è forse qualche variazione. –