Pamięć podręczna procesora… każdy o niej słyszał, ale nie każdy wie, za co jest odpowiedzialna i jak działa. Przecież, po co nam śladowe ilości pamięci, kiedy zaraz obok posiadamy kilkanaście GB pamięci RAM?
W dzisiejszych czasach nie musimy przejmować się pamięcią podręczną procesora, ponieważ nasze Ryzeny, Penitumy, Threadrippery, czy inne ”Core-iX” są najczęściej wyposażone w odpowiednią jej ilość. Ponadto i tak nie mamy możliwości wpłynięcia na jej prędkość, czy pojemność, dlatego, po co zawracać sobie głowę czymś, co działa, a my i tak nie mamy na to wpływu? No cóż… znaleźliście się tutaj, a więc z pewnością musi być jakiś powód, dlatego czas rzucić nieco światła na kwestię pamięci podręcznej będącą nieodzownym elementem praktycznie każdego procesora od 1995 roku. Początkowo istniał tylko jeden poziom pamięci (L2), ale wraz ze wzrostem wydajności procesorów, te musiały dostawać potrzebne informacje jeszcze szybciej i częściej. Ostatecznie doszło do tego, że dzisiejsze procesory Intela i AMD posiadają głównie trzy pokłady wspomnianej pamięci – L1, L2 i L3 o pojemności mierzonej w kilobajtach, albo kilku megabajtach. Ta w przeciwieństwie do rozwiązań DRAM (Dynamic RAM), które stosuje się w modułach DDR, jest znacznie droższa i szybsza, ponieważ nie wymaga nieustannego odświeżania. Stąd też nazwa — Static RAM (SRAM).
Co tu robi budowniczy?
Na początek posłużę się prostą analogią, która zdecydowanie ułatwi zrozumienie tematu. Wyobraźcie sobie, że procesor jest budowniczym, pracującym na drabinie nad no wiecie, budowniczymi rzeczami. Do pracy potrzebuje jednak narzędzi, a te znajdują się w jego: dłoniach, kieszeniach, skrzynce z narzędziami i w samochodzie. Oczywiście natychmiastowy dostęp ma do narzędzi w jego dłoniach, które jednak nie należą do ”najpojemniejszych”. Dlatego w razie potrzeby musi sięgać do kieszeni, następnie schylać się do skrzynki z narzędziami znajdującej się na samym dole drabiny, a w najgorszych przypadkach opuszczać poligon budowniczy i iść do swojego samochodu. Są to kolejno nawiązania do pamięci podręcznej L1, L2, L3 oraz operacyjnej (RAM). Od najszybszej i najmniejszej do najwolniejszej, ale zaraz najpojemniejszej.
Mała ciekawostka. W przypadku niektórych propozycji Intela możemy również zauważyć dodatek w postaci pamięci L4, który najczęściej współpracuje głównie ze zintegrowanym układem graficznym.
Przelewając to na temat technologiczny, pamięć podręczna jest niczym innym, jak buforem, magazynem danych, które procesor potrzebuje do pracy. Jeśli jest za wolna, to procesor, zamiast nieustannie przetwarzać stawiane mu zadania, jest zmuszony czekać na potrzebne instrukcje i sięgać „głębiej” (są to tak zwane Cache Misses). Tego oczywiście producenci starają się unikać, nieustannie zwiększając pojemność i zmniejszając opóźnienia dostępu do poszczególnych poziomów. Tak więc celem systemu pamięci podręcznej jest upewnienie się, że procesor dostanie bit danych w momencie, kiedy zacznie go szukać (tzn. Cache Hit). Ten jest zależny nie tylko od prędkości najszybszego pokładu L1, ale również od wielkości pozostałych buforów.
Pamięć podręczna, a wydajność procesora
Tym razem zasięgnę przykładu wymyślonego w artykule na łamach serwisu ExtremeTech.com, ponieważ w idealnym stylu wyjaśnia, jaki wpływ na wydajność procesora ma właśnie pamięć cache. W skrócie im jest jej więcej, tym lepiej, ale powiązane z całym mechanizmem opóźnienia są równie ważne, co prezentuje poniższy przykład.
Wyobraźmy sobie, że procesor musi ładować dane z pamięci podręcznej L1 sto razy z rzędu. Przyjmijmy, że L1 ma opóźnienie dostępu 1ns i współczynnik trafień (powyżej wyjaśniony Cache Hit) 100%. Wtedy procesor wykona postawione mu zadanie w czasie 100 nanosekund.
Załóżmy teraz, że pamięć podręczna ma współczynnik Cache Hits na poziomie 99%, ale dane, których CPU potrzebuje do ostatniego, setnego dostępu, znajdują się w pamięci L2 z 10 nanosekundowym opóźnieniem dostępu. Oznacza to tyle, że procesor wykona 99 odczytów w 99 nanosekundach, ale na ostatnim etapie, sięgając do pokładu L2, straci 10 nanosekund. Sprowadza się to do 10% spowolnienia prędkości wykonywania zadań przez procesor i to z założeniem, że pominięte dane zawsze znajdują się w pamięci podręcznej L2. Jeśli dane znajdują się w wolniejszych magazynach, to czas na wykonanie operacji może drastycznie wzrosnąć, a nawet się podwoić.
Ze względu na to przypisanie do każdego z rdzeni własnego, oddzielnego pokładu pamięci podręcznej L1 jest niezwykle ważne. To też stosuje AMD i Intel w konsumenckich układach, dzieląc ją na kilkadziesiąt KB na dane oraz instrukcje. W najnowszych Core Coffee Lake i Ryzenach stosuje się najczęściej również oddzielną pamięć L2, ale w niektórych przypadkach ta jest współdzielona przez wszystkie rdzenie fizyczne oraz (siłą rzeczy) logiczne, za pośrednictwem technologii SMT. Z kolei L3 o pojemności rzędu kilku MB jest z reguły dostępna dla wszystkich rdzeni.
Podsumowanie
Mam nadzieję, że w przystępny sposób opisałem działanie i rolę pamięci podręcznej w procesorach. Pominąłem oczywiście wiele kwestii, które zostały różnie rozwiązane w przypadku poszczególnych serii procesorów, w których architekturę naprawdę nie chciałem się zagłębiać, bo zrobiłyby one z tego artykułu coś w tylu niezjadliwego dokumentu technicznego. Mam jednak wrażenie, że przez następne lata rola pamięci podręcznej nadal będzie pomijana i przemilczana w wielu recenzjach… chyba że jakiś producent zaliczy wtopę pokroju serii procesorów Bulldozer od AMD.