Zacznijmy od tego:
myślę, że najnowsze procesory SMP używają 3-poziomowych pamięci podręcznych, więc chcę zrozumieć hierarchię poziomów pamięci podręcznej i ich architekturę .
aby zrozumieć pamięć podręczną, musisz wiedzieć kilka rzeczy:
procesor ma rejestry. Wartości w tym mogą być bezpośrednio użyte. Nic nie jest szybsze.
jednak nie możemy dodać nieskończonych rejestrów do Chipa. Te rzeczy zajmują miejsce. Jeśli powiększymy chip, będzie droższy. Po części dlatego, że potrzebujemy większego układu (więcej krzemu), ale także dlatego, że liczba układów z problemami wzrasta.
(Obraz wyimaginowany wafel o powierzchni 500 cm2. Wyciąłem z niego 10 żetonów, każdy o wielkości 50 cm2. Jeden z nich jest zepsuty. Odrzucam go i jestem w lewo 9 żetonów roboczych. Teraz weź ten sam wafel i wyciąłem z niego 100 żetonów, każdy dziesięć razy mniejszy. Jeden z nich, jeśli jest zepsuty. Odrzucam złamany chip i pozostaje mi 99 żetonów roboczych. To ułamek straty, jaką bym poniósł. Aby zrekompensować większe żetony, musiałbym poprosić o wyższe ceny. Więcej niż Tylko cena za dodatkowy silikon)
jest to jeden z powodów, dla których chcemy małych, niedrogich chipów.
jednak im bliżej pamięci podręcznej jest procesor, tym szybszy jest dostęp.
jest to również łatwe do wyjaśnienia; sygnały elektryczne poruszają się w pobliżu prędkości światła. To jest szybkie, ale wciąż skończona prędkość. Nowoczesny procesor pracuje z zegarami GHz. To również jest szybkie. Jeśli wezmę PROCESOR 4 GHz, sygnał elektryczny może podróżować około 7,5 cm na zegar. To jest 7,5 cm w linii prostej. (Chipy to nic innego jak proste połączenia). W praktyce będziesz potrzebował znacznie mniej niż te 7,5 cm, ponieważ nie pozwala to na czas dla chipów do przedstawienia wymaganych danych i sygnału do podróży z powrotem.
Podsumowując, chcemy, aby pamięć podręczna była jak najbardziej zbliżona fizycznie. Co oznacza duże żetony.
te dwa muszą być zrównoważone (wydajność vs.koszt).
gdzie dokładnie znajdują się pamięci podręczne L1, L2 i L3 w komputerze?
zakładając tylko sprzęt w stylu PC (mainframe są zupełnie inne, w tym pod względem wydajności vs. bilans kosztów);
IBM XT
oryginalny 4,77 Mhz: Brak pamięci podręcznej. Procesor uzyskuje bezpośredni dostęp do pamięci. Odczyt z pamięci byłby zgodny z tym wzorem:
- procesor umieszcza adres, który chce odczytać na szynie pamięci i zapewnia flagę odczytu
- pamięć umieszcza dane na szynie danych.
- procesor kopiuje dane z magistrali danych do swoich rejestrów wewnętrznych.
80286 (1982)
nadal brak pamięci podręcznej. Dostęp do pamięci nie był dużym problemem dla wersji o niższej prędkości (6Mhz), ale szybszy model działał do 20Mhz i często musiał opóźniać dostęp do pamięci.
wtedy dostajesz taki scenariusz:
- procesor umieszcza adres, który chce odczytać na szynie pamięci i zgłasza flagę odczytu
- pamięć zaczyna umieszczać dane na szynie danych. Procesor czeka.
- pamięć zakończyła pobieranie danych i jest teraz stabilna na szynie danych.
- procesor kopiuje dane z magistrali danych do swoich rejestrów wewnętrznych.
to dodatkowy krok spędzony na czekaniu na pamięć. Na nowoczesnym systemie, który może być łatwo 12 kroków, dlatego mamy cache.
80386: (1985)
Procesory stają się szybsze. Zarówno na zegar, jak i przy wyższych prędkościach zegara.
RAM robi się szybszy, ale nie tak szybszy jak procesory.
w rezultacie potrzeba więcej stanów oczekiwania.Niektóre płyty główne obejdą to, dodając pamięć podręczną (czyli pamięć podręczną poziomu 1st) na płycie głównej.
odczyt z pamięci rozpoczyna się od sprawdzenia, czy dane są już w pamięci podręcznej. Jeśli jest to jest odczytywane ze znacznie szybszego cache. Jeśli nie ta sama procedura, jak opisano w 80286
80486: (1989)
jest to pierwszy procesor tej generacji, który ma trochę pamięci podręcznej na procesorze.
jest to zunifikowana pamięć podręczna 8kB, co oznacza, że jest używana do danych i instrukcji.
w tym czasie często umieszcza się 256KB szybkiej pamięci statycznej na płycie głównej jako pamięć podręczną drugiego poziomu. Tak więc pamięć podręczna pierwszego poziomu na procesorze, pamięć podręczna drugiego poziomu na płycie głównej.
80586 (1993)
586 lub Pentium-1 używa Cache split level 1. 8 KB dla danych i instrukcji. Pamięć podręczna została podzielona tak, aby pamięć podręczna danych i instrukcji mogła być indywidualnie dopasowana do ich konkretnego zastosowania. Nadal masz mały, ale bardzo szybki 1. cache w pobliżu procesora i większy, ale wolniejszy 2. cache na płycie głównej. (W większej odległości fizycznej).
w tym samym obszarze pentium 1 Intel wyprodukował Pentium Pro („80686”). W zależności od modelu układ ten posiadał 256KB, 512kb lub 1MB pamięci podręcznej. Był również znacznie droższy, co łatwo wyjaśnić poniższym obrazkiem.
zauważ, że połowa miejsca w chipie jest używana przez pamięć podręczną. A to dla modelu 256KB. Więcej pamięci podręcznej było technicznie możliwe, a niektóre modele były produkowane z pamięcią podręczną 512KB i 1MB. Cena rynkowa była wysoka.
zauważ również, że ten układ zawiera dwie matryce. Jeden z faktycznym procesorem i 1. cache, a drugi z 256KB 2. cache.
Pentium-2
pentium 2 jest rdzeniem pentium pro. Ze względów ekonomicznych nie ma drugiego cache ’ a w procesorze. Zamiast tego, co jest sprzedawane a CPU nas PCB z oddzielnymi układami dla procesora (i 1. cache) i 2. cache.
w miarę postępu technologii i rozpoczynamy tworzenie układów z mniejszymi komponentami, możliwe jest finansowe umieszczenie 2. pamięci podręcznej z powrotem w rzeczywistej matrycy procesora. Jednak nadal istnieje podział. Bardzo szybki 1. cache podłączony do procesora. Z jednym pierwszym cache na rdzeń PROCESORA i większym, ale mniej szybkim drugim cache obok rdzenia.
Pentium-3
Pentium-4
to nie zmienia się dla pentium-3 lub pentium-4.
mniej więcej w tym czasie osiągnęliśmy praktyczny limit na to, jak szybko możemy zegara procesorów. 8086 lub 80286 nie wymagały chłodzenia. Pentium-4 pracujący z częstotliwością 3,0 GHz wytwarza tak dużo ciepła i zużywa tyle mocy, że bardziej praktyczne staje się umieszczenie dwóch oddzielnych procesorów na płycie głównej, a nie jednego szybkiego.
(dwa procesory 2,0 GHz zużywałyby mniej mocy niż pojedynczy identyczny Procesor 3,0 GHz, ale mogłyby wykonać więcej pracy).
można to rozwiązać na trzy sposoby:
- spraw, aby procesory były bardziej wydajne, aby wykonywały więcej pracy z tą samą prędkością.
- Użyj wielu procesorów
- Użyj wielu procesorów w tym samym „chipie”.
1) jest procesem ciągłym. Nie jest nowy i nie przestanie.
2) zostało wykonane wcześnie (np. z podwójnymi płytami głównymi Pentium-1 i chipsetem NX). Do tej pory była to jedyna opcja do budowy szybszego komputera.
3) wymaga procesorów, w których wiele „rdzeni procesora” jest wbudowanych w jeden układ. (Nazwaliśmy ten procesor dwurdzeniowym procesorem, aby zwiększyć zamieszanie. Dziękuję marketing:))
w dzisiejszych czasach po prostu nazywamy procesor „rdzeniem”, aby uniknąć nieporozumień.
dostajesz teraz chipy takie jak pentium-D (duo), czyli w zasadzie dwa rdzenie pentium-4 na tym samym chipie.
pamiętasz zdjęcie starego pentium-Pro? Z ogromnym rozmiarem pamięci podręcznej?
widzisz te dwa duże obszary na tym zdjęciu?
okazuje się, że możemy współdzielić ten drugi cache między oba rdzenie procesora. Prędkość nieco by spadła, ale współdzielony 2.cache 512kib jest często szybszy niż dodanie dwóch niezależnych 2. Cache poziomu o połowę większego.
oznacza to, że jeśli przeczytasz coś z jednego rdzenia procesora, a później spróbujesz odczytać to z innego rdzenia, który ma ten sam cache, otrzymasz Cache hit. Pamięć nie musi być dostępna.
ponieważ programy migrują między procesorami, w zależności od obciążenia, liczby rdzeni i harmonogramu, możesz uzyskać dodatkową wydajność, przypinając programy, które używają tych samych danych do tego samego procesora (Cache trafia na L1 i niższe) lub na tych samych procesorach, które współdzielą cache L2 (i tym samym uzyskują misses na L1, ale trafienia na L2 czyta Cache).
Tak więc w późniejszych modelach zobaczysz współdzielone pamięci podręczne poziomu 2.
jeśli programujesz dla nowoczesnych procesorów to masz dwie opcje:
- nie kłopocz się. System operacyjny powinien być w stanie zaplanować wszystko. Harmonogram ma duży wpływ na wydajność komputera, a ludzie poświęcili wiele wysiłku na jego optymalizację. Jeśli nie robisz czegoś dziwnego lub optymalizujesz dla jednego konkretnego modelu komputera, lepiej jest użyć domyślnego harmonogramu.
- jeśli potrzebujesz każdej części wydajności, a szybszy sprzęt nie wchodzi w grę, spróbuj pozostawić bieżniki, które mają dostęp do tych samych danych na tym samym rdzeniu lub na rdzeniu z dostępem do współdzielonej pamięci podręcznej.
zdaję sobie sprawę, że nie wspomniałem jeszcze o L3 cache, ale nie są one różne. Pamięć podręczna L3 działa w ten sam sposób. Większy niż L2, wolniejszy niż L2. I często jest dzielony między rdzenie. Jeśli jest obecny, jest znacznie większy niż cache L2 (w przeciwnym razie posiadanie go nie miałoby sensu) i często jest współdzielony ze wszystkimi rdzeniami.