wpadłem perf analizy na poniższym pustym programuperf stat daje inną liczbę instrukcji dla każdego biegu
#include <stdio.h>
int main() {
}
Po kompilacji i uruchamiania perf stat ./a.out Mam następujący wynik mówiący (wraz z inne dane, takie jak liczba cykli zegara, zadanie itp):
418,869 instructions # 0.87 insns per cycle
liczbę instrukcji zmian podczas każdego „” perf analizy tego samego elfa.
Naprawdę potrzebuję znaleźć liczbę instrukcji w konkretnej funkcji, którą napisałem. Tak więc odejmuję powyższą liczbę od liczby instrukcji w nowym programie (mógłbym policzyć liczbę linii w programach s utworzonych przy użyciu znacznika -S w gcc, ale jestem zdezorientowany po spojrzeniu na zachowanie perf)
Dlaczego liczba instrukcji nie jest zgodna, a dokładniej nie to samo?
Aktualizacja ja za przykładem podanym w man page używać perf_event_open() w C
perf_event_open() dał mi dokładną liczbę równą liczbie instrukcji w pliku .s. Instrukcje perf stat -e: u a.out podaje również za każdym razem inny numer, ale wariacja nie jest tak duża, jak w scenariuszu wyjaśnionym w pytaniu. – Vignesh
przy użyciu perf_event_open dokładnie nkwo to, co mierzysz. Dla (małej) zmiany pozostającej nawet po dodaniu: u Sądzę, że wiele rzeczy wciąż jest robionych w przestrzeni użytkownika, zanim wywoływana jest główna funkcja w twoim programie, i może jest tu jakaś odmiana. –