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)?
Odpowiedz
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.
libpapi to biblioteka, której szukasz. Chipy AMD i Intel zapewniają liczbę insnów.
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.
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;
}
- 1. Jak ustawić obciążenie procesora w systemie Red Hat Linux?
- 2. Jak zainstalować yum w Red Hat 3.4.6-3
- 3. Jak mogę logować instrukcje SQL wykonywane przez Flyway?
- 4. Jaki jest oficjalny sposób instalacji Haskell Platform 2014, od źródła, na Red Hat?
- 5. Jak liczyć różnice między dwoma plikami w systemie Linux?
- 6. Czy instrukcje Python Inline są wykonywane dwukrotnie?
- 7. Jak zmusić httpd do korzystania z rh-php56 z kolekcji oprogramowania red hat
- 8. Java Nie znaleziono w systemie Linux
- 9. Automatyzacja komunikacji portu szeregowego w systemie Linux
- 10. Jak mogę liczyć kolumny tabeli
- 11. Jak mogę przerwać dowolne połączenie TCP/IP w systemie Linux?
- 12. Jak mogę utworzyć obraz fali MP3 w systemie Linux?
- 13. Jak mogę chronić pamięć sterty w systemie Linux?
- 14. Jak zainstalować Maven2 na RedHat Linux
- 15. Przeciek pamięci Java/Tomcat w systemie RedHat Linux?
- 16. Jak mogę logować instrukcje `PREPARE` w PostgreSQL?
- 17. Jak używać głośnika PC w systemie Linux?
- 18. Jak złapać błąd segmentacji w systemie Linux?
- 19. Jak zatrzymać proces "nieprzerywanego" w systemie Linux?
- 20. Programowanie kamery w systemie Linux
- 21. Jak liczyć jak liczyć na konkretny kraj?
- 22. Rozwój ARM na systemie Linux
- 23. Jak skompilować bibliotekę statyczną w systemie Linux?
- 24. Jak wywołać "cpuid" w systemie Linux?
- 25. Jak uruchomić plik binarny w systemie Linux
- 26. Jak zmienić hasło w systemie Linux?
- 27. Jak zainstalować węzeł-gyp w systemie Linux?
- 28. Jak rejestrować zużycie pamięci w systemie Linux?
- 29. Jak skompilować kod objc w systemie Linux?
- 30. Profilowanie wydajności w systemie Linux
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
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
@kriss: co horsh powiedział --- Szukam numeru, który jest stabilny i powtarzalny. –