Prozessor-Cache L1, L2 und L3 bestehen alle aus SRAM?

10

Sind die Prozessor-Caches L1, L2 und L3 alle aus SRAM? Wenn ja, warum ist L1 schneller als L2 und L2 ist schneller als L3? Ich habe diesen Teil nicht verstanden, als ich darüber las.

Acaz Souza
quelle
Verwandte Frage: Warum benötigen wir mehrere Ebenen des Cache-Speichers? . Ebenfalls etwas verwandt: Was ist eigentlich ein mehrstufiger Cache in Prozessoren? . Aus Ihrem Kommentar dort geht hervor, dass Sie die letztere Frage bereits gefunden haben.
Paul A. Clayton

Antworten:

12

Im Allgemeinen werden sie alle mit SRAM implementiert.

(Die POWER- und zArchitecture-Chips von IBM verwenden DRAM-Speicher für L3. Dies wird als eingebetteter DRAM bezeichnet, da er in derselben Prozesstechnologie wie die Logik implementiert ist und die schnelle Logik in denselben Chip wie der DRAM integriert werden kann. Für POWER4 ist der Off- Chip L3 verwendet eDRAM; POWER7 hat den L3 auf dem gleichen Chip wie die Prozessorkerne.)

Obwohl sie SRAM verwenden, verwenden sie nicht alle dasselbe SRAM-Design. SRAM für L2 und L3 sind hinsichtlich der Größe optimiert (um die Kapazität bei begrenzter herstellbarer Chipgröße zu erhöhen oder die Kosten einer bestimmten Kapazität zu senken), während SRAM für L1 eher hinsichtlich der Geschwindigkeit optimiert wird.

Noch wichtiger ist, dass die Zugriffszeit von der physischen Größe des Speichers abhängt. Bei einem zweidimensionalen Layout kann man erwarten, dass die physische Zugriffslatenz ungefähr proportional zur Quadratwurzel der Kapazität ist. (Eine ungleichmäßige Cache-Architektur nutzt dies aus, um eine Teilmenge des Caches mit geringerer Latenz bereitzustellen. Die L3-Slices der jüngsten Intel-Prozessoren haben einen ähnlichen Effekt. Ein Treffer im lokalen Slice hat eine erheblich geringere Latenz.) Dieser Effekt kann einen DRAM-Cache schneller machen als ein SRAM-Cache bei hohen Kapazitäten, da der DRAM physikalisch kleiner ist.

Ein weiterer Faktor ist, dass die meisten L2- und L3-Caches den seriellen Zugriff auf Tags und Daten verwenden, während die meisten L1-Caches parallel auf Tags und Daten zugreifen. Dies ist eine Leistungsoptimierung (L2-Fehlerraten sind höher als L1-Fehlerraten, sodass der Datenzugriff mit größerer Wahrscheinlichkeit zu Arbeitsverschwendung führt, der L2-Datenzugriff erfordert im Allgemeinen mehr Energie - bezogen auf die Kapazität - und L2-Caches weisen normalerweise eine höhere Assoziativität auf was bedeutet, dass mehr Dateneinträge spekulativ gelesen werden müssten). Wenn Sie vor dem Zugriff auf die Daten auf den Tag-Abgleich warten müssen, erhöht sich natürlich die Zeit, die zum Abrufen der Daten erforderlich ist. (Der L2-Zugriff beginnt normalerweise auch erst, nachdem ein L1-Fehler bestätigt wurde, sodass die Latenz der L1-Fehlererkennung zur Gesamtzugriffslatenz von L2 addiert wird .)

Darüber hinaus ist der L2-Cache physisch weiter von der Ausführungs-Engine entfernt. Das Platzieren des L1-Datencaches in der Nähe der Ausführungs-Engine (so dass der häufige Fall eines L1-Treffers schnell ist) bedeutet im Allgemeinen, dass L2 weiter entfernt platziert werden muss.

Paul A. Clayton
quelle
Gute Antwort. Ich stimme Ihrer Aussage jedoch nicht zu, dass die L2-Miss-Raten höher sind als die L1-Miss-Raten. Wenn wir uns in der Speicherhierarchie nach unten bewegen, haben wir größere Strukturen, die weniger Fehler liefern, aber eine erhöhte Latenz aufweisen.
Harshavardhan Ramanna
@HarshavardhanRamanna Ja, eine Erhöhung der Kapazität und der Assoziativität helfen dabei, die Fehlerrate zu verringern, aber die Filterzugriffe auf niedrigeren Ebenen filtern (die herkömmliche Übertragung eines ganzen Blocks von L2 filtert die kurzfristige räumliche Lokalität innerhalb des Blocks heraus; der Treffer zählt nur für einen Zugriff in L2, während der Der Block selbst liefert wahrscheinlich Treffer in L1 für zusätzliche Zugriffe. Die Gesamtfehlerquote sinkt (z. B. erhält ein L2 mit einer anständigen Trefferquote von 80% und ein L1 mit einer Trefferquote von 95% eine Trefferquote von 99%).
Paul A. Clayton