Skrytka ofiary
Pamięć podręczna ofiary to mała, zwykle w pełni asocjacyjna pamięć podręczna umieszczona na ścieżce uzupełniania pamięci podręcznej procesora , która przechowuje wszystkie bloki usunięte z tego poziomu pamięci podręcznej, pierwotnie zaproponowana w 1990 r. W nowoczesnych architekturach ta funkcja jest zwykle wykonywana przez poziom 3 lub Skrytki poziomu 4.
Przegląd
Buforowanie ofiar to technika sprzętowa poprawiająca wydajność pamięci podręcznych zaproponowana przez Normana Jouppiego . Jak wspomniano w jego artykule:
Miss caching umieszcza w pełni asocjacyjną pamięć podręczną między pamięcią podręczną a ścieżką jej ponownego wypełnienia. Braki w pamięci podręcznej, które trafiły do pamięci podręcznej chybień, mają karę jednego cyklu, w przeciwieństwie do kary za chybienie w wielu cyklach bez pamięci podręcznej chybień. Buforowanie ofiar to ulepszenie buforowania chybień, które ładuje małą, w pełni asocjacyjną pamięć podręczną z ofiarą chybienia, a nie żądaną linią pamięci podręcznej.
Pamięć podręczna ofiar to sprzętowa pamięć podręczna zaprojektowana w celu zmniejszenia chybionych konfliktów i poprawy opóźnienia trafień dla pamięci podręcznych mapowanych bezpośrednio. Jest stosowany na ścieżce uzupełniania pamięci podręcznej poziomu 1, tak że każda linia pamięci podręcznej , która zostanie eksmitowana z pamięci podręcznej, jest buforowana w pamięci podręcznej ofiary. W ten sposób pamięć podręczna ofiary zostaje zapełniona tylko wtedy, gdy dane są usuwane z pamięci podręcznej poziomu 1. W przypadku pomyłki na poziomie 1 pominięty wpis jest wyszukiwany w pamięci podręcznej ofiary. Jeśli wynikający z tego dostęp jest trafieniem, następuje zamiana zawartości linii pamięci podręcznej poziomu 1 i pasującej linii pamięci podręcznej ofiary.
Chociaż Jouppi początkowo zaproponował poprawę wydajności pamięci podręcznej mapowanej bezpośrednio pamięci podręcznej poziomu 1, współczesne mikroprocesory z wielopoziomową hierarchią pamięci podręcznej wykorzystują pamięć podręczną poziomu 3 lub 4 do działania jako pamięć podręczna ofiary dla pamięci podręcznej znajdującej się nad nią w hierarchii pamięci. Intel Crystal Well swoich procesorów Haswell wprowadził w pakiecie pamięć podręczną poziomu 4, która służy jako pamięć podręczna ofiary do pamięci podręcznej poziomu 3 procesora. Pamięć podręczna poziomu 3 o wielkości 4–12 MB jest używana jako pamięć podręczna ofiary w POWER5 (IBM).
Tło
Wraz z rozwojem architektury sprzętowej i technologii wydajność i częstotliwość procesorów rosły znacznie szybciej niż czasy cyklu pamięci, co prowadziło do znacznej luki w wydajności. Problem zwiększania opóźnienia pamięci w stosunku do szybkości procesora został rozwiązany przez dodanie szybkiej pamięci podręcznej.
Pamięci podręczne mapowane bezpośrednio mają szybszy czas dostępu niż pamięci podręczne z zestawem asocjacyjnym . Jednak gdy wiele bloków pamięci podręcznej w pamięci jest mapowanych na tę samą linię pamięci podręcznej w pamięci podręcznej mapowanej bezpośrednio, ostatecznie eksmitują się nawzajem, gdy ktoś uzyskuje do nich dostęp. Jest to znane jako problem konfliktu pamięci podręcznej. Ten problem został rozwiązany przez zwiększenie asocjatywności pamięci podręcznej. Istnieje jednak granica, do której asocjatywność może zostać zwiększona ze względu na złożoność jej implementacji. Zatem do rozwiązania problemu konfliktu pamięci podręcznej dla pamięci podręcznej o ograniczonej asocjatywności używana jest pamięć podręczna ofiary.
Realizacja
Poniżej przedstawiono zachowanie pamięci podręcznej ofiary w jej odpowiedniej interakcji z pamięcią podręczną odpowiedniego poziomu:
Trafienie w pamięć podręczną: Brak działania
Cache Miss, Victim Hit: Blok znajduje się w pamięci podręcznej ofiary, a blok w pamięci podręcznej jest zastępowany. Ten nowy wpis w pamięci podręcznej ofiary staje się ostatnio używanym blokiem.
Cache Miss, Victim Miss: Blok jest przenoszony do pamięci podręcznej z następnego poziomu. Blok usunięty z pamięci podręcznej jest przechowywany w pamięci podręcznej ofiary.
Przykład:
Załóżmy, że pamięć podręczna L1 jest mapowana bezpośrednio z blokami A, B wskazującymi na ten sam zestaw. Jest powiązany z w pełni asocjacyjną pamięcią podręczną ofiar zawierającą 2 wpisy z blokami C, D.
Ślad, którym należy podążać: A, B, A, B…
Z diagramu widać, że w przypadku trafienia ofiary w pamięć podręczną (VC), bloki A i B są zamienione miejscami. Najrzadziej używany blok VC pozostaje bez zmian. W związku z tym daje złudzenie asocjatywności z bezpośrednio mapowaną pamięcią podręczną L1, co z kolei zmniejsza liczbę pomyłek konfliktowych.
W przypadku dwóch pamięci podręcznych, L1 i L2 z wyłączną polityką pamięci podręcznej (L2 nie buforuje tych samych lokalizacji pamięci co L1), L2 działa jako pamięć podręczna ofiary dla L1.
Implikacja wydajności
Podczas pomiaru poprawy wydajności przy użyciu pamięci podręcznej ofiar, Jouppi założył bezpośrednio mapowaną pamięć podręczną poziomu 1, powiększoną o w pełni asocjacyjną pamięć podręczną. W używanym przez niego zestawie testów średnio 39% chybień w pamięci podręcznej danych poziomu 1 to chybienia w wyniku konfliktu, podczas gdy średnio 29% chybień w instrukcjach poziomu 1 to chybienia w wyniku konfliktu. Ponieważ chybienia związane z konfliktami stanowią duży procent wszystkich chybień, zapewnienie dodatkowej asocjatywności poprzez rozszerzenie pamięci podręcznej poziomu 1 pamięcią podręczną ofiary z pewnością znacznie poprawi całkowity wskaźnik chybień .
Wyniki eksperymentów są wydedukowane na podstawie 32-kilobajtowej, bezpośrednio mapowanej, dwukierunkowej iw pełni asocjacyjnej pamięci podręcznej, powiększonej o pamięć podręczną ofiary o wielkości 256 bloków (8 KB) i uruchomioną na niej 8 losowo wybranych testów porównawczych SPEC 95 . Chociaż wyników nie można uogólnić dla wszystkich testów porównawczych, dodanie pamięci podręcznej ofiar zapewnia zmniejszenie wskaźnika chybień w zakresie od 10% do 100% dla całej konfiguracji pamięci podręcznej. Zwroty wydają się jednak ustabilizować poza rozmiarem pamięci podręcznej ofiar wynoszącym 50 bloków, co potwierdza obserwację Jouppiego, że korzyści z pamięci podręcznej ofiar osiągają plateau po kilku pierwszych blokach ofiary.
Stwierdzono, że redukcja współczynnika chybień dla rozmiaru pamięci podręcznej 64 KB jest znacznie niższa, co dowodzi, że buforowanie ofiar nie jest skalowalne w nieskończoność.
Porównując różne konfiguracje pamięci podręcznej, stwierdzono, że w niektórych przypadkach dodanie małej pamięci podręcznej ofiary może dać wzrost wydajności równoważny z obserwowanym przez pomnożenie rozmiaru pamięci podręcznej przez 2.