| Autor: | Wojciech Muła |
|---|---|
| Dodany: | 19.06.2007 |
Począwszy od procesorów Pentium (P5) dostępne są PMC — dwa 40-bitowe liczniki zdolne równocześnie zliczać różne zdarzenia związane z wykonywaniem programu, jak np. liczba dostępów do pamięci, zdekodowanych rozkazów, wstrzymań wykonywania kodu z różnych powodów, itp. Uwaga: niektóre zdarzenia mogą być liczone tylko przez jeden, określony licznik.
PMC mogą zliczać albo zdarzenia, albo czas (liczbę cykli) jaki zajęło wykonanie danych zdarzeń: decyduje o tym zawartość pola counter mask, jeśli jest równe zero — zliczane są zdarzenia, większe od zera — cykle. Dzięki temu można np. określić wykorzystanie jednostek wykonawczych:
$ p6perf UOPS_RETIRED cm=0 UOPS_RETIRED cm=1 sleep 2 counter 0: UOPS_RETIRED, um=0x00, cm=0x00 = 3402654 counter 1: UOPS_RETIRED, um=0x00, cm=0x01 = 1737939 counter 1/counter 0 = 0.5108 counter 0/counter 1 = 1.9579
Interpretacja: counter_0 (3_402_654) to całkowita liczba wykonanych mikrorozkazów, counter_1 (1_737_939) to liczba cykli w jakich wykonano co najmniej 1 mikrorozkaz — jak widać z podsumowania w jednym cyklu wykonywały się blisko 2 mikrorozkazy.
Program p6perf pozwala na ustawianie i odczytywanie PMC w procesorach P6 (PII, PIII, ...); w P5 PMC są trochę inaczej zorganizowane.
Szczegóły nt PMC znajdują się w tomie 3. „System programming” (243191), sekcja 15.6. „Performance-Monitoring Counters”. Zdarzenia, które można zliczać zostały wypisane (i objaśnione) w dodatku A.1 „P6 Family Processor Performance-Monitoring Events”.