Wo genau befinden sich die L1-, L2- und L3-Caches im Computer?
Ich weiß, wir verwenden Cache, um die Leistung zu steigern, indem wir DATEN und ANWEISUNGEN aus dem Cache statt aus dem Hauptspeicher auswählen.
Nachfolgend meine Fragen
- Wo genau befindet sich der L1-Cache? Befindet er sich auf dem CPU-Chip?
Wo genau befindet sich der L2-Cache?
Wo genau befindet sich der L3-Cache? Befindet er sich auf der Hauptplatine?
Ich glaube, die neuesten SMP-Prozessoren verwenden dreistufige Caches, daher möchte ich die Hierarchie der Cache-Ebenen und ihre Architektur verstehen.
Antwort1
Beginnen wir damit:
Ich glaube, die neuesten SMP-Prozessoren verwenden dreistufige Caches, daher möchte ich die Hierarchie der Cache-Ebenen und ihre Architektur verstehen.
Um Caches zu verstehen, müssen Sie einige Dinge wissen:
Eine CPU hat Register. Werte darin können direkt verwendet werden. Schneller geht es nicht.
Wir können jedoch nicht unendlich viele Register zu einem Chip hinzufügen. Diese Dinge nehmen Platz weg. Wenn wir den Chip größer machen, wird er teurer. Das liegt zum Teil daran, dass wir einen größeren Chip (mehr Silizium) brauchen, aber auch daran, dass die Anzahl der Chips mit Problemen zunimmt.
(Stellen Sie sich einen imaginären Wafer mit 500 cm2 vor . Ich schneide daraus 10 Chips, jeder Chip ist 50 cm2 groß . Einer davon ist kaputt. Ich werfe ihn weg und mir bleiben 9 funktionierende Chips. Nehmen Sie nun denselben Wafer und schneide ich daraus 100 Chips, jeder zehnmal so klein. Einer davon ist kaputt. Ich werfe den kaputten Chip weg und mir bleiben 99 funktionierende Chips. Das ist ein Bruchteil des Verlusts, den ich sonst gehabt hätte. Um die größeren Chips zu kompensieren, müsste ich höhere Preise verlangen. Mehr als nur den Preis für das zusätzliche Silizium.)
Dies ist einer der Gründe, warum wir kleine, erschwingliche Chips wollen.
Allerdings ist der Zugriff auf den Cache umso schneller, je näher dieser an der CPU liegt.
Auch das ist leicht zu erklären: Elektrische Signale bewegen sich mit annähernd Lichtgeschwindigkeit. Das ist zwar schnell, aber immer noch eine endliche Geschwindigkeit. Moderne CPUs arbeiten mit GHz-Takten. Das ist auch schnell. Wenn ich eine 4-GHz-CPU nehme, kann ein elektrisches Signal pro Takt etwa 7,5 cm weit wandern. Das sind 7,5 cm in gerader Linie. (Chips sind alles andere als gerade Verbindungen.) In der Praxis werden Sie deutlich weniger als diese 7,5 cm benötigen, da den Chips dann keine Zeit bleibt, die angeforderten Daten zu präsentieren und das Signal zurück zu wandern.
Unterm Strich wollen wir den Cache physisch so nah wie möglich haben. Das bedeutet große Chips.
Diese beiden müssen abgewogen werden (Leistung vs. Kosten).
Wo genau befinden sich die L1-, L2- und L3-Caches in einem Computer?
Unter der Annahme, dass es sich ausschließlich um Hardware im PC-Stil handelt (Großrechner unterscheiden sich erheblich, auch im Hinblick auf das Verhältnis von Leistung und Kosten);
IBM XT
Das Original mit 4,77 MHz: Kein Cache. Die CPU greift direkt auf den Speicher zu. Ein Lesevorgang aus dem Speicher würde diesem Muster folgen:
- Die CPU legt die zu lesende Adresse auf dem Speicherbus ab und setzt das Leseflag
- Der Speicher legt die Daten auf den Datenbus.
- Die CPU kopiert die Daten vom Datenbus in ihre internen Register.
80286 (1982)
Immer noch kein Cache. Der Speicherzugriff war bei den langsameren Versionen (6 MHz) kein großes Problem, aber das schnellere Modell lief bis zu 20 MHz und musste beim Speicherzugriff häufig eine Verzögerung einleiten.
Sie erhalten dann ein Szenario wie dieses:
- Die CPU legt die zu lesende Adresse auf dem Speicherbus ab und setzt das Leseflag
- Der Speicher beginnt, die Daten auf den Datenbus zu legen. Die CPU wartet.
- Der Speicher hat das Abrufen der Daten abgeschlossen und ist jetzt stabil auf dem Datenbus.
- Die CPU kopiert die Daten vom Datenbus in ihre internen Register.
Das ist ein zusätzlicher Schritt, der mit dem Warten auf den Speicher verbracht wird.Auf einem modernen System können das leicht 12 Schritte sein, weshalb wir Cache haben.
80386: (1985)
Die CPUs werden schneller. Sowohl pro Takt als auch durch höhere Taktraten.
RAM wird schneller, aber nicht so viel schneller als CPUs.
Daher sind mehr Wartezustände erforderlich. Einige Motherboards umgehen dies, indem sie Cache (das wäre Cache der 1. Ebene ) auf dem Motherboard hinzufügen.
Ein Lesevorgang aus dem Speicher beginnt nun mit einer Überprüfung, ob die Daten bereits im Cache vorhanden sind. Wenn dies der Fall ist, werden sie aus dem viel schnelleren Cache gelesen. Wenn nicht, wird dasselbe Verfahren wie beim 80286 beschrieben angewendet.
80486: (1989)
Dies ist die erste CPU dieser Generation, die über einen Cache auf der CPU verfügt.
Es handelt sich um einen 8 KB großen einheitlichen Cache, was bedeutet, dass er für Daten und Anweisungen verwendet wird.
Ungefähr zu dieser Zeit wurde es üblich, 256 KB schnellen statischen Speicher als Cache der 2. Ebene auf dem Motherboard zu platzieren . Also Cache der 1. Ebene auf der CPU, Cache der 2. Ebene auf dem Motherboard.
80586 (1993)
Der 586 oder Pentium-1 verwendet einen geteilten Level-1-Cache. Jeweils 8 KB für Daten und Befehle. Der Cache wurde so aufgeteilt, dass die Daten- und Befehls-Caches individuell auf ihre jeweilige Verwendung abgestimmt werden konnten. Sie haben immer noch einen kleinen, aber sehr schnellen 1. Cache in der Nähe der CPU und einen größeren, aber langsameren 2. Cache auf dem Motherboard. (Bei größerer physischer Entfernung).
Im gleichen Pentium-1-Bereich produzierte Intel denPentium Pro('80686'). Je nach Modell hatte dieser Chip 256Kb, 512KB oder 1MB Onboard-Cache. Er war auch deutlich teurer, was sich anhand des folgenden Bildes leicht erklären lässt.
Beachten Sie, dass die Hälfte des Platzes im Chip vom Cache genutzt wird. Und das gilt für das 256-KB-Modell. Technisch war mehr Cache möglich und einige Modelle wurden mit 512-KB- und 1-MB-Cache hergestellt. Der Marktpreis dafür war hoch.
Beachten Sie auch, dass dieser Chip zwei Chips enthält. Einen mit der eigentlichen CPU und dem 1. Cache und einen zweiten Chip mit 256 KB 2. Cache .
Pentium-2
Der Pentium 2 ist ein Pentium Pro-Kern. Aus Kostengründen ist in der CPU kein 2. Cache enthalten. Stattdessen wird als CPU eine Platine mit separaten Chips für CPU (und 1. Cache ) und 2. Cache verkauft.
Mit dem technologischen Fortschritt und der Entwicklung von Chips mit kleineren Komponenten wird es finanziell möglich, den 2. Cache wieder in den eigentlichen CPU-Chip zu integrieren . Allerdings gibt es immer noch eine Aufteilung. Sehr schneller 1. Cache , der sich an die CPU schmiegt. Mit einem 1. Cache pro CPU-Kern und einem größeren, aber weniger schnellen 2. Cache neben dem Kern.
Pentium-3
Pentium-4
Dies ändert sich weder für den Pentium-3 noch für den Pentium-4.
Ungefähr zu dieser Zeit erreichten wir eine praktische Grenze, wie schnell wir CPUs takten konnten. Ein 8086 oder ein 80286 brauchten keine Kühlung. Ein Pentium-4 mit 3,0 GHz erzeugt so viel Wärme und verbraucht so viel Strom, dass es praktischer ist, zwei separate CPUs auf dem Motherboard unterzubringen, anstatt einer schnellen.
(Zwei 2,0-GHz-CPUs würden weniger Strom verbrauchen als eine einzelne identische 3,0-GHz-CPU, könnten aber dennoch mehr Arbeit leisten).
Dies könnte auf drei Arten gelöst werden:
- Machen Sie die CPUs effizienter, damit sie bei gleicher Geschwindigkeit mehr Arbeit erledigen.
- Verwenden Sie mehrere CPUs
- Verwenden Sie mehrere CPUs im selben „Chip“.
1) Ist ein laufender Prozess. Er ist nicht neu und wird nicht aufhören.
2) Wurde schon früh gemacht (z.B. mit Dual Pentium-1 Mainboards und dem NX Chipsatz). Bis jetzt war das die einzige Möglichkeit, einen schnelleren PC zu bauen.
3) Erfordert CPUs, bei denen mehrere „CPU-Kerne“ in einem einzigen Chip verbaut sind. (Um die Verwirrung noch zu steigern, haben wir diese CPU dann Dual-Core-CPU genannt. Danke, Marketing :) )
Heutzutage bezeichnen wir die CPU einfach als „Kern“, um Verwirrung zu vermeiden.
Sie erhalten jetzt Chips wie den Pentium-D (Duo), bei dem es sich im Wesentlichen um zwei Pentium-4-Kerne auf demselben Chip handelt.
Erinnern Sie sich an das Bild des alten Pentium-Pro? Mit der riesigen Cache-Größe?
Sehen Sie sich diezweigroße Flächen in diesem Bild?
Es stellt sich heraus, dass wir diesen 2. Cache zwischen beiden CPU-Kernen teilen können . Die Geschwindigkeit würde etwas sinken, aber ein gemeinsam genutzter 2. Cache mit 512 KiB ist oft schneller als das Hinzufügen von zwei unabhängigen Caches der 2. Ebene mit halber Größe.
Dies ist für Ihre Frage wichtig.
Das bedeutet, dass Sie einen Cache-Treffer erhalten, wenn Sie etwas von einem CPU-Kern lesen und später versuchen, es von einem anderen Kern zu lesen, der denselben Cache verwendet. Auf den Speicher muss nicht zugegriffen werden.
Da Programme je nach Auslastung, Anzahl der Kerne und Scheduler zwischen CPUs migrieren, können Sie die Leistung steigern, indem Sie Programme, die dieselben Daten verwenden, auf dieselbe CPU beschränken (Cache-Treffer auf L1 und darunter) oder auf dieselben CPUs, die den L2-Cache gemeinsam nutzen (und daher Fehler auf L1, aber Treffer beim Lesen des L2-Cache erhalten).
Daher werden Sie bei späteren Modellen gemeinsam genutzte Caches der Stufe 2 sehen.
Wenn Sie für moderne CPUs programmieren, haben Sie zwei Möglichkeiten:
- Machen Sie sich keine Gedanken. Das Betriebssystem sollte in der Lage sein, Dinge zu planen. Der Planer hat einen großen Einfluss auf die Leistung des Computers und es wurde viel Aufwand in die Optimierung gesteckt. Sofern Sie nichts Seltsames tun oder für ein bestimmtes PC-Modell optimieren, sind Sie mit dem Standardplaner besser bedient.
- Wenn Sie jedes letzte bisschen Leistung benötigen und schnellere Hardware keine Option ist, versuchen Sie, die Threads, die auf dieselben Daten zugreifen, auf demselben Kern oder auf einem Kern mit Zugriff auf einen gemeinsam genutzten Cache zu belassen.
Mir ist klar, dass ich den L3-Cache noch nicht erwähnt habe, aber sie unterscheiden sich nicht. Ein L3-Cache funktioniert auf die gleiche Weise. Größer als L2, langsamer als L2. Und er wird oft von den Kernen gemeinsam genutzt. Wenn er vorhanden ist, ist er viel größer als der L2-Cache (sonst wäre er ja sinnlos) und er wird oft von allen Kernen gemeinsam genutzt.
Antwort2
Dass Caches interne Komponenten des Prozessors sind. Manche werden von den Kernen gemeinsam genutzt, manche sind individuell, das hängt von der Implementierung ab. Aber alle sind auf dem Chip untergebracht. Einige Details: Intel Intel® Core™ i7 Prozessor, genommenHier:
- Ein 32-KB-Befehls- und 32-KB-Daten-First-Level-Cache (L1) für jeden Kern
- Ein gemeinsam genutzter Anweisungs-/Daten-Second-Level-Cache (L2) mit 256 KB für jeden Kern
- 8 MB gemeinsam genutzter Last-Level-Cache (L3) für Anweisungen/Daten, der von allen Kernen gemeinsam genutzt wird
Foto des Prozessorchips (leider kenne ich das genaue Modell nicht). Man sieht, dass der Cache viel Platz auf dem Chip einnimmt:
Antwort3
Der Cache befindet sich für den schnellsten Zugriff fast immer auf dem Chip. Hier ist ein schönes Diagramm, das einen Quad-Core-Intel-CPU-Chip mit hervorgehobenem L3-Cache zeigt. Wenn Sie sich Bilder wie dieses von einem CPU-Chip ansehen, sind große, gleichmäßige Bereiche normalerweise Speicherbänke auf dem Chip, die als Cache verwendet werden.
Antwort4
Beim L3 bin ich mir nicht sicher, aber L1/L2 befinden sich immer auf der CPU. In der Hierarchie ist L1 im Grunde normalerweise der Befehlscache, L2 und L3 sind Datencaches.