Articles

Explainer: L1 vs. L2 vs. L3 Cache

każdy procesor znaleziony w dowolnym komputerze, od taniego laptopa po serwer wart milion dolarów, będzie miał coś o nazwie cache. Bardziej prawdopodobne niż nie, będzie posiadać kilka poziomów, to zbyt.

To musi być ważne, inaczej po co miałoby tam być? Ale co robi cache, i dlaczego potrzeba różnych poziomów rzeczy? Co w ogóle oznacza 12-drożny zestaw asocjacyjny?

czym dokładnie jest cache?

TL;DR: jest to mała, ale bardzo szybka pamięć, która znajduje się tuż obok jednostek logicznych procesora.
ale oczywiście o pamięci podręcznej możemy dowiedzieć się znacznie więcej …

zacznijmy od wyimaginowanego, magicznego systemu przechowywania danych: jest nieskończenie szybki, może obsługiwać nieskończoną liczbę transakcji danych naraz i zawsze zapewnia bezpieczeństwo danych. Nie, że coś nawet zdalnie do tego istnieje, ale gdyby tak było, konstrukcja procesora byłaby znacznie prostsza.

Procesory muszą mieć tylko jednostki logiczne do dodawania, mnożenia itp. i system do obsługi transferu danych. Dzieje się tak dlatego, że nasz teoretyczny system przechowywania może natychmiast wysyłać i odbierać wszystkie wymagane numery; żadna z jednostek logicznych nie byłaby wstrzymana w oczekiwaniu na transakcję danych.

ale, jak wszyscy wiemy, nie ma żadnej magicznej technologii przechowywania. Zamiast tego mamy dyski twarde lub półprzewodnikowe, a nawet najlepsze z nich nie są nawet zdalnie zdolne do obsługi wszystkich transferów danych wymaganych dla typowego procesora.

świetny T ’ Phon przechowywania danych

powodem jest to, że nowoczesne procesory są niesamowicie szybkie-wymagają tylko jednego cyklu zegara, aby dodać dwie 64-bitowe wartości całkowite razem, a dla procesora pracującego z częstotliwością 4 GHz byłoby to po prostu 0.00000000025 sekund lub ćwierć nanosekundy.

tymczasem wirujące dyski twarde zajmują tysiące nanosekund, aby znaleźć dane na dyskach wewnątrz, nie mówiąc już o ich przesyłaniu, a dyski półprzewodnikowe nadal zajmują dziesiątki lub setki nanosekund.

takie Napędy oczywiście nie mogą być wbudowane w procesory, więc oznacza to, że będzie fizyczna separacja między nimi. To po prostu dodaje więcej czasu na przenoszenie danych, co jeszcze gorzej.

Wielki A ’ Tuin przechowywania danych, niestety

więc to, czego potrzebujemy, to inny system przechowywania danych, który znajduje się pomiędzy procesorem a główną pamięcią masową. Musi być szybszy niż dysk, być w stanie obsługiwać wiele transferów danych jednocześnie i być znacznie bliżej procesora.

Cóż, mamy już coś takiego i nazywa się RAM, a każdy system komputerowy ma coś do tego właśnie celu.

prawie wszystkie tego rodzaju pamięci to DRAM (dynamic random access memory) i jest w stanie przekazywać dane znacznie szybciej niż jakikolwiek dysk.

jednak, chociaż DRAM jest super szybki, nie może przechowywać w pobliżu tak dużej ilości danych.

niektóre z największych układów pamięci DDR4 firmy Micron, jednego z niewielu producentów pamięci DRAM, posiadają 32 GB lub 4 GB danych; największe dyski twarde przechowują 4000 razy więcej niż to.

więc chociaż poprawiliśmy szybkość naszej sieci danych, potrzebne będą dodatkowe systemy-Sprzęt i oprogramowanie-aby dowiedzieć się, jakie dane powinny być przechowywane w ograniczonej ilości pamięci DRAM, gotowe do procesora.

przynajmniej DRAM może znajdować się w pakiecie chipowym (znanym jako embedded DRAM). Procesory są jednak dość małe, więc nie można w nie włożyć aż tyle.

10 MB pamięci DRAM po lewej stronie procesora graficznego Xboxa 360. Źródło: CPU Grave Yard

zdecydowana większość pamięci DRAM znajduje się tuż obok procesora, podłączonego do płyty głównej i zawsze jest to najbliższy komponent procesora, w systemie komputerowym. A jednak wciąż nie jest wystarczająco szybki…

DRAM nadal zajmuje około 100 nanosekund, aby znaleźć dane, ale przynajmniej może przesyłać miliardy bitów co sekundę. Wygląda na to, że potrzebujemy kolejnego etapu pamięci, aby przejść pomiędzy procesorem a pamięcią DRAM.

Enter stage left: SRAM (static random access memory). Tam, gdzie DRAM używa mikroskopijnych kondensatorów do przechowywania danych w postaci ładunku elektrycznego, SRAM używa tranzystorów do tego samego działania i mogą one pracować prawie tak szybko, jak jednostki logiczne w procesorze (około 10 razy szybciej niż DRAM).

jest oczywiście wada SRAM i po raz kolejny chodzi o przestrzeń.

pamięć tranzystorowa zajmuje dużo więcej miejsca niż pamięć DRAM: przy takim samym rozmiarze 4 GB PAMIĘCI DDR4 otrzymałbyś mniej niż 100 MB pamięci SRAM. Ponieważ proces ten jest wykonywany w ten sam sposób, co proces tworzenia procesora, SRAM może być zbudowany bezpośrednio wewnątrz procesora, tak blisko jednostek logicznych, jak to możliwe.

pamięć tranzystorowa zajmuje dużo więcej miejsca niż pamięć DRAM: przy takim samym rozmiarze 4 GB PAMIĘCI DDR4 otrzymałbyś mniej niż 100 MB pamięci SRAM.

z każdym dodatkowym etapem zwiększyliśmy szybkość przenoszenia danych o, do kosztów, ile możemy przechowywać. Możemy kontynuować dodawanie w większej liczbie sekcji, z których każdy jest szybszy, ale mniejszy.

i tak dochodzimy do bardziej technicznej definicji tego, czym jest pamięć podręczna: jest to wiele bloków pamięci SRAM, wszystkie umieszczone wewnątrz procesora; są one używane, aby zapewnić, że jednostki logiczne są tak zajęte, jak to możliwe, poprzez wysyłanie i przechowywanie danych z superszybkimi prędkościami. Zadowolony? Dobrze , bo od teraz będzie o wiele bardziej skomplikowane!

Cache: wielopoziomowy parking

jak już wspominaliśmy, pamięć podręczna jest potrzebna, ponieważ nie ma magicznego systemu przechowywania, który mógłby nadążyć za wymaganiami danych jednostek logicznych w procesorze. Nowoczesne procesory i procesory graficzne zawierają wiele bloków SRAM, które są wewnętrznie zorganizowane w hierarchię-sekwencję pamięci podręcznych, które są uporządkowane w następujący sposób:

na powyższym obrazku procesor jest reprezentowany przez czarny przerywany prostokąt. ALUs (jednostki arytmetyczno-logiczne) znajdują się po lewej stronie; są to struktury, które zasilają procesor, obsługując matematykę, którą robi chip. Chociaż technicznie nie jest to pamięć podręczna, najbliższy poziom pamięci do Alu to rejestry (są one zgrupowane w plik rejestru).

każda z nich zawiera pojedynczą liczbę, taką jak 64-bitowa liczba całkowita; sama wartość może być fragmentem danych o czymś, kodem konkretnej instrukcji lub adresem pamięci innych danych.

plik rejestru w procesorze desktopowym jest dość mały-na przykład w procesorze Intel Core i9-9900k są dwa ich banki w każdym rdzeniu, a jeden dla liczb całkowitych zawiera tylko 180 rejestrów 64-bitowych. Drugi plik rejestru, dla wektorów (małych tablic liczb), ma 168 256-bitowych wpisów. Więc całkowity plik rejestru dla każdego rdzenia jest trochę poniżej 7 kB. Dla porównania, plik rejestru w Wieloprocesorach strumieniowych (odpowiednik rdzenia procesora GPU) NVIDIA GeForce RTX 2080 ti ma rozmiar 256 kB.

rejestry są SRAM, podobnie jak cache, ale są tak samo szybkie jak ALUS, które obsługują, wypychając dane w jednym cyklu zegara. Ale nie są one zaprojektowane do przechowywania dużej ilości danych (tylko jednego kawałka), dlatego zawsze w pobliżu znajdują się większe bloki pamięci: jest to pamięć podręczna poziomu 1.

Procesor Intel Skylake, powiększony o pojedynczy rdzeń. Źródło: Wikichip

powyższy obraz jest powiększonym ujęciem pojedynczego rdzenia z desktopowego procesora Intela Skylake.

ALUs i pliki rejestru są widoczne po lewej stronie, podświetlone na Zielono. W górnej połowie obrazu, w kolorze białym, znajduje się pamięć podręczna danych poziomu 1. To nie zawiera zbyt wielu informacji, tylko 32 kB, ale podobnie jak rejestry, jest bardzo blisko jednostek logicznych i działa z taką samą prędkością jak one.

drugi biały prostokąt wskazuje pamięć podręczną instrukcji poziomu 1, również o rozmiarze 32 kB. Jak sama nazwa wskazuje, przechowuje on różne polecenia gotowe do podziału na mniejsze, tzw. mikro operacje (zwykle oznaczane jako µops), aby ALUS mógł wykonać. Jest też dla nich pamięć podręczna i możesz ją zaklasyfikować jako poziom 0, ponieważ jest mniejsza (zawiera tylko 1500 operacji) i bliższa niż pamięci podręczne L1.

możesz się zastanawiać, dlaczego te bloki SRAM są tak małe, dlaczego nie mają megabajta? Razem pamięci podręczne danych i instrukcji zajmują prawie tyle samo miejsca w chipie, co główne jednostki logiczne, więc ich powiększenie zwiększyłoby Całkowity rozmiar matrycy.

ale głównym powodem, dla którego przechowują tylko kilka kB, jest to, że czas potrzebny na znalezienie i odzyskanie danych wzrasta wraz ze wzrostem pojemności pamięci. Pamięć podręczna L1 musi być naprawdę szybka, a więc należy osiągnąć kompromis między rozmiarem a szybkością – w najlepszym przypadku potrzeba około 5 cykli zegara (dłuższych dla wartości zmiennoprzecinkowych), aby dane z tej pamięci podręcznej były gotowe do użycia.

Skylake ’ s L2 cache: 256 kB pamięci SRAM

ale gdyby był to jedyny cache wewnątrz procesora, jego wydajność uderzyłaby nagle w ścianę. Dlatego wszystkie mają inny poziom pamięci wbudowanej w rdzenie: pamięć podręczną poziomu 2. Jest to ogólny blok przechowywania, trzymający się instrukcji i danych.

zawsze jest nieco większy niż poziom 1: procesory AMD ZEN 2 pakują się do 512 kB, więc bufory niższego poziomu mogą być dobrze zaopatrzone. Ten dodatkowy rozmiar ma jednak swoją cenę, a znalezienie i przesłanie danych z tej pamięci podręcznej zajmuje mniej więcej dwa razy dłużej niż poziom 1.

cofając się w czasie, do czasów oryginalnego Intela Pentium, Level 2 cache był oddzielnym układem, albo na małej płytce drukowanej (jak DIMM RAM) lub wbudowanej w główną płytę główną. Ostatecznie udało mu się przejść do samego pakietu procesorów, aż w końcu został zintegrowany z matrycą procesora, w rodzaju procesorów Pentium III i AMD K6-III.

rozwój ten został wkrótce po kolejnym poziomie pamięci podręcznej, tam do obsługi innych niższych poziomów, a stało się to ze względu na wzrost wielordzeniowych układów.

Procesor Intel Kaby Lake. Źródło: Wikichip

Ten obraz, z chipem Intel Kaby Lake, pokazuje 4 rdzenie w lewo-środku (zintegrowany GPU zajmuje prawie połowę matrycy, po prawej). Każdy rdzeń ma swój własny „prywatny” zestaw pamięci podręcznych poziomu 1 i 2 (białe i żółte podświetlenia), ale są one również dostarczane z trzecim zestawem bloków SRAM.

pamięć podręczna poziomu 3, mimo że znajduje się bezpośrednio wokół pojedynczego rdzenia, jest w pełni współdzielona z innymi-każdy z nich może swobodnie uzyskać dostęp do zawartości drugiego cache L3. Jest znacznie większy (od 2 do 32 MB), ale także znacznie wolniejszy, średnio ponad 30 cykli, zwłaszcza jeśli rdzeń musi korzystać z danych znajdujących się w bloku pamięci podręcznej w pewnej odległości.

poniżej widać pojedynczy rdzeń w architekturze AMD Zen 2: 32 kB Level 1 przechowuje Dane i instrukcje w kolorze białym, 512 KB Level 2 w Kolorze Żółtym, a ogromny blok 4 MB pamięci podręcznej L3 w kolorze czerwonym.

procesor AMD Zen 2, powiększony o pojedynczy rdzeń. Źródło: Fritzchens Fritz

Jak 32 kB może zająć więcej przestrzeni fizycznej niż 512 kB? Jeśli Poziom 1 zawiera tak mało danych, dlaczego jest proporcjonalnie o wiele większy niż pamięć podręczna L2 lub L3?

więcej niż tylko liczba

Pamięć podręczna zwiększa wydajność, przyspieszając transfer danych do jednostek logicznych i przechowując kopię często używanych instrukcji i danych w pobliżu. Informacje przechowywane w pamięci podręcznej są podzielone na dwie części: same dane i miejsce, w którym pierwotnie znajdowały się w pamięci systemowej/pamięci masowej-ten adres nazywa się tagiem pamięci podręcznej.

gdy procesor wykonuje operację, która chce odczytać lub zapisać dane z/do pamięci, zaczyna się od sprawdzenia znaczników w pamięci podręcznej poziomu 1. Jeśli wymagany jest obecny (trafienie pamięci podręcznej), dane te można uzyskać niemal natychmiast. Brak pamięci podręcznej występuje, gdy wymagany znacznik nie znajduje się na najniższym poziomie pamięci podręcznej.

więc nowy tag jest tworzony w pamięci podręcznej L1, a reszta architektury procesora przejmuje kontrolę, szukając z powrotem przez inne poziomy pamięci podręcznej (aż do głównego dysku pamięci, jeśli to konieczne), aby znaleźć dane dla tego tagu. Ale aby zrobić miejsce w pamięci podręcznej L1 dla tego nowego tagu, coś innego zawsze musi zostać uruchomione do L2.

powoduje to niemal ciągłe tasowanie danych, a wszystko to w ciągu zaledwie kilku cykli zegara. Jedynym sposobem na osiągnięcie tego celu jest posiadanie złożonej struktury wokół SRAM, która obsługuje zarządzanie danymi. Put another way: jeśli rdzeń PROCESORA składał się tylko z jednego ALU, wtedy pamięć podręczna L1 byłaby znacznie prostsza, ale ponieważ jest ich dziesiątki (z których wiele będzie żonglować dwoma wątkami instrukcji), pamięć podręczna wymaga wielu połączeń, aby wszystko było w ruchu.

Możesz użyć darmowych programów, takich jak CPU-Z, aby sprawdzić informacje o pamięci podręcznej procesora zasilającego własny komputer. Ale co te wszystkie informacje oznaczają? Ważnym elementem jest zestaw etykiet asocjacyjnych – chodzi o reguły wymuszane przez sposób kopiowania bloków danych z pamięci systemowej do pamięci podręcznej.

powyższe informacje dotyczące pamięci podręcznej dotyczą procesora Intel Core i7-9700k. każda Pamięć podręczna poziomu 1 jest podzielona na 64 małe bloki, zwane zestawami, a każda z nich jest dalej podzielona na linie pamięci podręcznej (rozmiar 64 bajtów). Zestaw asocjacyjny oznacza, że blok danych z pamięci systemowej jest mapowany na linie pamięci podręcznej w jednym konkretnym zestawie, a nie jest wolny do mapowania w dowolnym miejscu.

część 8-kierunkowa mówi nam, że jeden blok może być powiązany z 8 liniami cache w zestawie. Im wyższy poziom asocjatywności (tj. więcej „sposobów”), tym większe szanse na trafienie w pamięć podręczną, gdy procesor poluje na dane, i zmniejszenie kar spowodowanych pominięciem pamięci podręcznej. Wadą jest to, że zwiększa złożoność, zwiększa zużycie energii, a także może zmniejszyć wydajność, ponieważ istnieje więcej linii pamięci podręcznej do przetworzenia dla bloku danych.

L1+L2 inclusive cache, L3 cache, write-back polices, nawet ECC. Źródło: Fritzchens Fritz

kolejnym aspektem złożoności pamięci podręcznej jest sposób przechowywania danych na różnych poziomach. Zasady są określone w czymś, co nazywa się polityką integracji. Na przykład procesory Intel Core mają w pełni włączoną pamięć podręczną L1+L3. Oznacza to, że te same dane na poziomie 1, na przykład, mogą być również na poziomie 3. Może się to wydawać, że marnuje cenną przestrzeń pamięci podręcznej, ale zaletą jest to, że jeśli procesor zostanie pominięty, podczas wyszukiwania znacznika na niższym poziomie, nie musi polować na wyższy poziom, aby go znaleźć.

w tych samych procesorach pamięć podręczna L2 nie jest włączona: wszelkie przechowywane tam dane nie są kopiowane na żaden inny poziom. Oszczędza to miejsce, ale powoduje, że system pamięci Chipa musi przeszukiwać L3 (który jest zawsze znacznie większy), aby znaleźć pominięty znacznik. Pamięci ofiar są podobne do tego, ale są używane do przechowywania informacji, które są wypychane z niższego poziomu – na przykład procesory AMD ZEN 2 używają pamięci podręcznej ofiar L3, która przechowuje dane z L2.

istnieją inne zasady dla pamięci podręcznej, takie jak zapisywanie danych do pamięci podręcznej i głównej pamięci systemowej. Są to tak zwane zasady zapisu i większość dzisiejszych procesorów używa pamięci podręcznej zapisu; oznacza to, że gdy dane zostaną zapisane na poziomie pamięci podręcznej, występuje opóźnienie, zanim pamięć systemowa zostanie zaktualizowana o jej kopię. W większości przypadków ta pauza działa tak długo, jak dane pozostają w pamięci podręcznej-tylko po jej uruchomieniu PAMIĘĆ RAM otrzymuje informacje.

procesor graficzny GA100 firmy NVIDIA, wyposażony w łącznie 20 MB pamięci podręcznej L1 i 40 MB pamięci podręcznej l2

dla projektantów procesorów wybór ilości, typu i polityki pamięci podręcznej polega na zrównoważeniu pragnienia większej wydajności procesora przed zwiększoną złożonością i wymaganą przestrzenią matrycy. Gdyby można było mieć 20 MB, 1000-way w pełni asocjacyjne Level 1 Cache bez chipów staje się wielkości Manhattan (i zużywa ten sam rodzaj energii), to wszyscy mielibyśmy komputery z takimi chipami!

najniższy poziom pamięci podręcznej w dzisiejszych procesorach nie zmienił się tak bardzo w ciągu ostatniej dekady. Jednak rozmiar pamięci podręcznej poziomu 3 nadal rośnie. Dekadę temu, można było dostać 12 MB tego, jeśli miał szczęście posiadać 999 dolarów Intel i7-980X .za połowę tej kwoty dzisiaj, masz 64 MB.

Cache, w skrócie: absolutnie potrzebne, absolutnie niesamowite kawałki technologii. Nie przyjrzeliśmy się innym typom pamięci podręcznych w procesorach i GPU (takim jak bufory wyszukiwania tłumaczeń lub bufory tekstur), ale ponieważ wszystkie są zgodne z prostą strukturą i wzorcem poziomów, o których tutaj mówiliśmy, być może nie będą brzmiały tak skomplikowanie.

czy posiadasz komputer z pamięcią podręczną L2 na płycie głównej? A co z procesorami Pentium II i Celeron (np. 300a), które pojawiły się na płycie? Czy pamiętasz swój pierwszy procesor, który miał wspólne L3? Daj nam znać w sekcji komentarzy.

skróty zakupowe:
  • AMD Ryzen 9 3900x na Amazon
  • AMD Ryzen 9 3950x na Amazon
  • Intel Core i9-10900k na Amazon
  • AMD Ryzen 7 3700x na Amazon
  • Intel Core i7-10700k na Amazon
  • AMD Ryzen 5 3600 na Amazon
  • Intel Core i5-10600K na Amazonie

Czytaj dalej. Explainers w TechSpot

  • Wi-Fi 6 wyjaśnione: następna generacja Wi-Fi
  • czym są rdzenie Tensorowe?
  • co to jest Binning chipów?