2011-07-31 12 views
13

To jest moje wymaganie, wiem, że niektóre algorytmy dobrze wykorzystują pamięć podręczną, inne nie, niektóre robią więcej operacji we/wy niż inne na konkretnym zestawie danych itp. Chciałbym zobaczyć i przeanalizować to samo.Cache Hit/Miss dla wartości w C/C++ Program

Tak więc zastanawiałem się, czy był sposób, w jaki mogłem się dowiedzieć, w jaki sposób odczytana jest pewna pamięć/zmienna, tj. Czy jest to z pamięci podręcznej, czy też brakowało pamięci podręcznej. Dalej, jeśli wystąpił błąd strony podczas pobierania tej wartości itp.

Wielkie dzięki!

+1

Możesz być zainteresowany tym pytaniem SO: http://stackoverflow.com/questions/3052776/how-to-detect-cache-misses-from-users-codes –

Odpowiedz

7

Jeśli naprawdę chcesz wiedzieć, kiedy twoje cache są trafione/brakujące, nowoczesne procesory mają liczniki wydajności, które możesz wykorzystać do tego celu. Używałem ich szeroko w badaniach akademickich. Najprostszym sposobem ich użycia jest perfmon2. Perfmon2 ma bibliotekę, do której możesz podłączyć swój program lub autonomiczny program, który będzie monitorował istniejący program. Na przykład, tutaj jest samodzielny program nagrywania wszystkich 1 Karta pamięci podręcznej żądania odczytu i tęskni poziomie:

pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program 

Dla porównania, Dodatek A this document (PDF) wymienia dokumentację Intela na jaki sprzęt liczniki są dostępne.

0

W zależności od konkretnego kompilatora, systemu operacyjnego i konkretnego modelu procesora, na którym działa. Nic (o czym wiem) w języku C/C++ daje ci dostęp do tego, co dzieje się na poziomie pamięci podręcznej.

Istnieją różne narzędzia pomiarowe, ale byłyby one w dużej mierze niezależne od języka.

Istnieje kilka "reguł" minimalizujących problemy z pamięcią podręczną i stronicowania, chociaż zajęłoby mi to trochę czasu, aby przemyśleć rozsądnie wyczerpującą listę.

4

Chciałbym spróbować użyć valgrind cachegrind tool, może wydrukować adnotowane linie źródłowe z liczbą trafień/braków w których pamięć podręczna dla tej linii.

+0

Pamiętaj, że chybienia pamięci podręcznej cachegrind nie są prawdziwe pamięć podręczna chybia, ale została zasymulowana. – osgx

1

Nie wiem, czy AMD CodeAnalyst może pokazać ten poziom szczegółowości, ale nie zaszkodzi sprawdzić.

+0

AMD CodeAnalyst jest nieco ograniczony na platformie Intel (ale bardzo prosty będzie działać). Tak więc, dla Intela są Intel Vtune; linux oprofile/perf/perfmon2. – osgx