2012-11-09 12 views
5

Czy istnieje prosty sposób szybkiego policzenia liczby wykonanych instrukcji (instrukcje x86 - które i ile każdego) podczas wykonywania programu C?Szybki sposób zliczania liczby instrukcji wykonywanych w programie C

Używam maszyny gcc version 4.7.1 (GCC) na komputerze x86_64 GNU/Linux.

+2

Zgadzam się z odpowiedzią Doness, że zazwyczaj ludzie chcą profilu czas realizacji na funkcję. Jeśli jednak naprawdę chcesz uzyskać dokładną liczbę wykonanych instrukcji, musisz uruchomić swój kod na symulatorze zestawu instrukcji, np. Http://www.simplescalar.com/ – TJD

+0

Czy możesz opracować, co próbujesz ukończyć? W wersji x86 wydajność wykonywania instrukcji zależy znacznie bardziej od kontekstu niż od rzeczywistej instrukcji - praktycznie wszystkie instrukcje mogą opcjonalnie być ładowane lub zapisywane, na przykład. Instrukcje czysto rejestracyjne będą zależały w złożony sposób od stanu potoku na nowoczesnych procesorach. To nie brzmi jak przydatne informacje dla mnie. –

+1

Dlaczego pytasz? Zazwyczaj * profilowanie * oznacza coś innego ... Np. Kompiluj z 'gcc -pg -Wall -O' i używaj' gprof' lub może 'oprofile' !! –

Odpowiedz

3

Prawdopodobnie duplikatem this question

mówię, prawdopodobnie dlatego, że poprosił o instrukcje asemblera, ale to kwestia obsługuje profilowanie C na poziomie kodu.

Moje pytanie brzmi: dlaczego chciałbyś profilować rzeczywiste instrukcje maszyny wykonane? Jako pierwszy problem, różni się on pomiędzy różnymi kompilatorami i ich ustawieniami optymalizacyjnymi. Jako bardziej praktyczny problem, co właściwie możesz zrobić z tymi informacjami? Jeśli poszukujesz/optymalizujesz wąskie gardła, profiler kodu jest tym, czego szukasz.

Może jednak brakuje mi czegoś ważnego.

+0

Liczba instrukcji CPU * wykonywanych * byłaby łatwym sposobem porównywania algorytmów bez martwienia się o czkawki lub konkurowania o zasoby z innymi programami, niezależnie od mocy obliczeniowej, choć nadal zależnej od zestawu instrukcji. – mpen

+1

@mpen: niekoniecznie, np.jeśli masz jeden algorytm, który używa dużych tabel wyszukiwania, i inny, który robi to samo, używając bardziej obliczeniowego podejścia, to pierwszy może mieć dużo więcej instrukcji ładowania, z których każdy może potencjalnie przeciągnąć na> 100 cykli z powodu błędów w pamięci podręcznej. Podobnie możesz mieć jeden algorytm, który używa wielu drogich instrukcji, np. 'FSQRT', i inny algorytm, który unika takich drogich instrukcji i może używa kilku dodatkowych dodawania/mnożenia - drugi może być szybszy, nawet jeśli wykonuje więcej instrukcji. –

1

Możesz łatwo policzyć liczbę wykonanych instrukcji za pomocą Hardware Performance Counter (HPC). Aby uzyskać dostęp do HPC, potrzebujesz do tego interfejsu. Zaleciłem użycie interfejsu API wydajności PAPI .

Powiązane problemy