artykuły

Wpływ pamięci podręcznej (cache L2 i L3) na wydajność procesorów

„Mój ma cache L3, a twój nie”

91 3 grudnia 2012, 14:56 Tomasz Niechaj i Radosław Stanisławski

Czy 4 MB pamięci podręcznej trzeciego poziomu to dużo, czy mało? Warto dopłacić do procesora, który ma jej więcej? Jaki wpływ na wydajność ma „cache L3”? Te pytania bardzo często pojawiają się w wątkach na forach dyskusyjnych w działach poświęconych procesorom. Dziś postanowiliśmy sprawdzić wpływ tego parametru na osiągi. Porównaliśmy ze sobą układy w tej samej architekturze i działające w tych samych ustawieniach, ale wyposażone w różną ilość zarówno L2, jak i L3.

Spis treści

Dlaczego pamięć podręczna jest ważna?

Pamięć podręczna to swoisty bufor danych (niezarządzany z poziomu systemu operacyjnego w przeciwieństwie do pamięci RAM), które były, są lub będą wykorzystywane przez jednostki obliczeniowe procesora. Nowoczesne procesory mają przynajmniej dwa jej poziomy (L1 oraz L2), a większość tych najwydajniejszych ma jeszcze trzeci (L3). Praktycznie zawsze pojemność poszczególnych poziomów rośnie wraz z liczbą przy literze. Dlaczego ten parametr jest tak ważny?

Poniżej zamieszczamy dwa wykresy obrazujące przepustowość poszczególnych sekcji pamięci podręcznej i RAM-u oraz czas dostępu do nich. No właśnie: co to za układ? Pozostawimy to tajemnicą, poczekamy na Wasze propozycje. Jedyną wskazówką niech będzie to, że działał on ze standardową częstotliwością :)

Przepustowość - kliknij aby powiększyć

Czas dostępu

Wróćmy do analizy wykresów. Łatwo z nich wyczytać, że L1 zapewnia około pięciokrotnie większą przepustowość (w odczycie) niż RAM. Jednak to nie wszystko: czas dostępu do pamięci podręcznej pierwszego poziomu jest krótszy nawet 25-krotnie!

Jeśli dodamy, że procesor cały czas operuje na jakichś danych, to łatwo będzie sobie wyobrazić, jaka byłaby wydajność dzisiejszych układów, gdyby były one pozbawione jakiejkolwiek pamięci podręcznej.

Dlaczego AMD i Intel nie sprzedają procesorów na przykład z 50 MB pamięci podręcznej?

Producenci – zarówno AMD, jak i Intel – muszą tu zawsze iść na pewien kompromis. Najważniejszym powodem są ograniczenia konstrukcyjne. Pamięć podręczna zajmuje ogromną liczbę tranzystorów i jest też jednym z głównych elementów pochłaniających energię. Dlatego dobierając jej pojemność, trzeba niejako wyważyć wydajność, pobór energii oraz powierzchnię rdzenia, a tym samym koszt produkcji. Chodzi też o to, że w specyficznych konstrukcjach im więcej pamięci podręcznej, tym czas dostępu do niej może być dłuższy, co wydaje się logiczne, biorąc pod uwagę, że większy obszar pamięci trzeba „przeszukać”.

Właśnie z tych powodów tańsze jednostki są pozbawione trzeciego poziomu pamięci podręcznej – są znacznie tańsze w produkcji. Bardzo dobrym przykładem jest tutaj porównanie pierwszego Phenoma z Phenomem II. Ten pierwszy miał 2 MB L3 i 450 mln tranzystorów, drugi zaś miał 6 MB L3, a liczba tranzystorów wynosiła w nim 758 mln. Większość z tej różnicy przypada właśnie na L3.


Poziomy pamięci podręcznej w Phenomie II X4 (Deneb)

No dobrze, ale po co w takim razie są te trzy poziomy?

To, co przed chwilą napisaliśmy, pośrednio wskazuje, dlaczego procesory wyposaża się w dwa lub trzy poziomy pamięci podręcznej. Dane zgromadzone w L1 to te, które akurat teraz są potrzebne, do nich jednostki wykonawcze sięgają lub mogą sięgnąć w każdej chwili. Jest ona względnie mało pojemna, ale dzięki temu czas dostępu do niej (znów – patrz wykresy powyżej) jest tak krótki. L2 to po prostu kolejny poziom buforu. Są do niego ściągane – z L3 lub bezpośrednio z RAM-u – te dane, które mogą być na przykład za chwilę potrzebne. Ponieważ czas dostępu do L2 nie jest już tak kluczowy, to może być jej więcej, a jej konstrukcja może być prostsza. Z L3 jest identycznie. Obecnie jest ona bardzo często używana do synchronizowania pracy wielu rdzeni: najczęściej to za jej pośrednictwem wymieniają się tymi samymi lub w jakiś sposób powiązanymi ze sobą danymi, na których operują.

Każdy poziom pamięci podręcznej jest i tak znacznie szybszy od nawet najszybszego RAM-u, zatem bardzo duża jej pojemność jest wskazana z punktu widzenia wydajności. Jest to szczególnie ważne w przypadku procesorów wielordzeniowych. Nie bez powodu sześciordzeniowe Core i7 mają jej 12 MB lub 16 MB, a czterordzeniowe – maksymalnie 8 MB.

Dlaczego AMD FX-8350 ma łącznie 16 MB tej pamięci, a Intel Core i7-3770K – tylko 8 MB?

Wynika to z tego, że pamięć podręczna w procesorach AMD jest typu „exclusive”, czyli dane znajdujące się w L1 nie znajdują się również (jako kopia) w L2. W przypadku jednostek Intela, w których jest ona typu „inclusive”, dane zawarte w L1 generalnie znajdują się również w L2, jak i L3 (jeśli jest). Pomijając korzyści i straty płynące z użycia każdego z tych rozwiązań, w przypadku jednostek AMD rzeczywiście możemy sumować pojemność poszczególnych poziomów, natomiast w przypadku Intela – nie. Nie należy jednak wyciągać z tego jakichkolwiek wniosków co do wydajności tych układów!

W sumie 16 MB pamięci podręcznej w procesorze AMD FX-8350

Więcej pamięci podręcznej nie zawsze oznacza wyższą wydajność!

Dzieje się tak w sytuacji, gdy dane właśnie potrzebne do obliczeń nie znajdą się w żadnym z poziomów pamięci podręcznej. Procesor działa bowiem w ten sposób, że w pierwszej kolejności szuka danych w L1. Jeśli ich nie znajdzie, to szuka w L2, a jeżeli i tam ich nie ma, to szuka w L3, jeśli zaś i tutaj ich nie będzie, to dopiero wówczas sięgnie do RAM-u. Łatwo teraz wyobrazić sobie sytuację, w której procesor z 2 MB L3 sięgnie do pamięci operacyjnej wcześniej niż ten sam procesor, ale wyposażony w 6 MB L3.

Oczywiście, celem konstruktorów jest całkowite wyeliminowanie tego problemu poprzez system pobrań wyprzedzających oraz przewidywania (predykcji) rozgałęzień kodu. Jeśli te funkcje działają poprawnie, to do wyżej opisanej sytuacji nigdy nie dochodzi. Dobre algorytmy wczesnego pobierania danych mogą skutecznie zastąpić większą pojemność pamięci podręcznej (szczególnie przy kiepskich algorytmach).

Co porównaliśmy?

Test podzieliliśmy na cztery etapy, obejmujące różne rodziny procesorów. Wyników nie należy ze sobą porównywać, gdyż dobór parametrów często wynikał z tego, że mieliśmy już przetestowany jakiś procesor w danym ustawieniu (do innego testu, który wcześniej ukazał się na łamach PCLab.pl).

  • Grupa 1. AMD Athlon II X4 640 (4 × 512 kB L2, 0 MB L3), AMD Athlon X4 (4 × 1024 kB L2, 0 MB L3) oraz AMD Phenom II X4 945 (4 × 512 kB L2, 6 MB L3) – wszystkie taktowane z częstotliwością 3 GHz.
  • Grupa 2. AMD Athlon X4 750K (2 × 2 MB L2, 0 MB L3) kontra AMD FX-4300 (2 × 2 MB L2, 4 MB L3) – obydwa taktowane z częstotliwością 4,5 GHz.
  • Grupa 3. Intel Pentium E5300 (2 MB L2), Intel Core 2 Duo E7400 (3 MB L2), Intel Core 2 Duo E8400 (6 MB L2) – wszystkie taktowane z częstotliwością 4 GHz.
  • Grupa 4. Intel Core i5-2500K (6 MB L3), Intel Core i7-2600K z wyłączoną funkcją Hyper-Threading (8 MB L3) – obydwa taktowane z częstotliwością 4,5 GHz.

Co ważne, wnioski dotyczące wpływu pamięci podręcznej w danej architekturze nie mają przełożenia na inną, a tym bardziej nie można ich odnosić do nadchodzących konstrukcji!

Strona:
emgiebZobacz profil
Poziom ostrzeżenia: 0%
emgieb2012.12.03, 15:10
20#1
Tak w kwestii formalnej 'Każdy poziom pamięci podręcznej jest i tak znacznie szybszy od nawet najszybszego RAM-u'. Powinno być DRAM-u zamiast RAM-u, jako że cache to zwykle SRAM ;]

Tak czy siak dobra robota, wreszcie można się przekonać naocznie gdzie i kiedy przydaje się cache.
kargulec12Zobacz profil
Poziom ostrzeżenia: 0%
kargulec122012.12.03, 15:15
43#2
Ostanio dużo fajnych i przydatnych testów, to mi się podoba :)
PioyZobacz profil
Poziom ostrzeżenia: 0%
Pioy2012.12.03, 15:20
14#3
Procesor to pierwszy Phenom?

Odnoszę wrażenie, że czym nowsza gra tym gorzej działa bez cache - mam rację?
barwniakZobacz profil
Poziom ostrzeżenia: 0%
barwniak2012.12.03, 15:27
Mogli by dawać więcej L2/L3 na osobnym kawałku krzemu na tej samej płytce co CPU. SRAM względem DRAM wymaga około 4 razy więcej tranzystorów. Mimo to warto, brak potrzeby odświeżania ma duże plusy. Dodatkowo między CPU i Cache było by do 1cm odległości zatem znacznie lepiej jak do RAM, gdzie jest 10 razy tyle. A wiadomo jak opór elektryczny zależy od odległości :)
lukeeeZobacz profil
Poziom ostrzeżenia: 0%
lukeee2012.12.03, 15:29
Czy można procesor nauczyć przewidywania (predykcji) rozgałęzień kodu? Wyobraźmy sobie sytuacje, że uruchamiamy swoją ulubioną grę/program, za pierwszym razem procesor gromadzi w jakiś pliku wskazówki co do rozgałęzień kodu, za drugim uruchomieniem gra chodzi już szybciej. Realne?
xxserZobacz profil
Poziom ostrzeżenia: 0%
xxser2012.12.03, 15:33
-19#6
Mam E8200 i jest dobrze ! :D:D
kocham fizykeZobacz profil
Poziom ostrzeżenia: 0%
kocham fizyke2012.12.03, 15:35
10#7
lukeee @ 2012.12.03 15:29  Post: 620214
Czy można procesor nauczyć przewidywania (predykcji) rozgałęzień kodu? Wyobraźmy sobie sytuacje, że uruchamiamy swoją ulubioną grę/program, za pierwszym razem procesor gromadzi w jakiś pliku wskazówki co do rozgałęzień kodu, za drugim uruchomieniem gra chodzi już szybciej. Realne?

Raczej nie. Chyba, że za każdym razem gra robiłaby dokładnie to samo. Problem z przewidywaniem jest w wielu miejscach i nie jest to taka prosta sprawa, jak to może wyglądać. Polecam poczytać chociażby: http://wazniak.mimuw.edu.pl/index.php?titl...w_komputerowych
jackowoZobacz profil
Poziom ostrzeżenia: 0%
jackowo2012.12.03, 15:36
10#8
Bardzo fajny test! Wniosek taki że nie warto dopłacać do Core i7 jeśli gramy.
focusZobacz profil
Poziom ostrzeżenia: 0%
Autor publikacjifocus2012.12.03, 15:37
Nikt nie zgaduje, który to procesor jest na wykresach na pierwszej stronie? :) Konkretny model poproszę!
HashiZobacz profil
Poziom ostrzeżenia: 0%
Hashi2012.12.03, 15:39
-9#10
Pamiętam w podstawówce jakieś 18 lat temu mówili nam o tym jak ważny jest cache. Dlatego biorąc 4 lata temu laptopa brałem ten z procem o największej ilości cache (4MB). To logiczne ze na końcu jest RAM, a potem dysk.
Zaloguj się, by móc komentować
1