2010-11-17 9 views
6

Chcę dowiedzieć się, ile instrukcji x86-64 jest wykonywanych podczas danego uruchomienia programu działającego na systemie Red Hat Enterprise Linux. Wiem, że mogę uzyskać te informacje od valgrind, ale spowolnienie jest znaczne. Wiem też, że używamy procesorów Intel Core 2 Quad (model Q6700), które mają wbudowane liczniki wydajności sprzętowej. Ale nie znam żadnego sposobu uzyskania dostępu do całkowitej liczby instrukcji wykonywanych z poziomu programu C.Jak mogę liczyć instrukcje wykonywane w systemie Red Hat Enterprise Linux (x86-64)?

+0

tylko się zastanawiam. Dlaczego miałbyś wykonywać liczbę instrukcji? Liczba cykli wydaje się bardziej znacząca niż dodawanie powolnych instrukcji (np. Dostęp do pamięci) z szybkimi związkami zarejestrowanymi. – kriss

+0

Liczba cykli obejmuje przeciągnięcia, takie jak oczekiwanie na dane dostarczane z pamięci podręcznych. Więc różni się od biegu do uruchomienia, podczas gdy liczba insynuacji pozostaje stała – horsh

+0

@kriss: co horsh powiedział --- Szukam numeru, który jest stabilny i powtarzalny. –

Odpowiedz

2

Performance Application Programming Interface (PAPI) wydaje się wzdłuż linii, czego szukasz.

Z website:

PAPI ma na celu zapewnienie projektanta narzędzia i inżynier aplikacji z spójny interfejs i metodyki wykorzystania sprzętu licznika wydajności znaleźć w większości dużych mikroprocesorów.

Vince Weaver, pracownik naukowy doktoratu z Innovative Computing Laboratory na University of Tennessee, wykonał pewną pracę z zakresu PAPI-related. Badanie wymienione na jego web page w UTK wygląda na to, że może dostarczyć pewnych dodatkowych informacji.

2

libpapi to biblioteka, której szukasz. Chipy AMD i Intel zapewniają liczbę insnów.

1

Jest kilka sposobów na to, w zależności od tego, czego dokładnie potrzebujesz. Jeśli chcesz tylko sprawdzić całkowitą liczbę potencjalnych argumentów, możesz po prostu uruchomić program objdump na binarnym, który da ci zestaw. Jeśli chcesz uzyskać bardziej szczegółowe informacje na temat rzeczywistych instrukcji dotyczących danego programu, możesz zajrzeć do DynamoRIO, która zapewnia tę funkcjonalność. Jest podobny do valgrind, ale uważam, że ma mniejszy wpływ na wydajność. Udało mi się stosunkowo szybko i łatwo złożyć we wrześniu podstawowy licznik instrukcji we wrześniu.

Jeśli to nie pomoże, możesz wypróbować PAPI, która jest interfejsem API, który powinien umożliwić uzyskanie liczników wydajności procesorów. Nigdy go nie używałem, więc nie mogę o tym mówić, ale mój przyjaciel użył go w projekcie około 6 miesięcy temu i powiedział, że jest bardzo pomocny.

1

Program pod dostępem do licznika cykli z rejestru C (przykro, ale nie działa, ale działa poprawnie z gcc). Ten jest dla liczenia cykli, to nie to samo, co instrukcje. Nowoczesne procesory mogą jednocześnie używać kilku cykli na tej samej instrukcji lub wykonywać kilka instrukcji naraz. Cykle zwykle bardziej obciążają tę liczbę instrukcji, ale zależy to od rzeczywistego celu.

Z innymi licznikami spektakli można oczywiście uzyskać dostęp na te same sposoby (w rzeczywistości nie wiem nawet, czy są inne), ale będę musiał poszukać właściwego kodu instrukcji do użycia.

static __inline__ unsigned long long rdtsc(void) 
{ 
    unsigned long long int x; 
    __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); 
    return x; 

}

Powiązane problemy