Beginnen wir damit:
Ich denke, die neuesten SMP-Prozessoren verwenden 3-Level-Caches, um die Hierarchie der Cache-Ebenen und ihre Architektur zu verstehen.
Um Caches zu verstehen, müssen Sie einige Dinge wissen:
Eine CPU hat Register. Werte darin können direkt verwendet werden. Nichts ist schneller.
Es können jedoch keine unendlichen Register zu einem Chip hinzugefügt werden. Diese Dinge nehmen Platz ein. Wenn wir den Chip größer machen, wird er teurer. Das liegt zum einen daran, dass wir einen größeren Chip (mehr Silizium) benötigen, aber auch, weil die Anzahl der Chips mit Problemen zunimmt.
(Bild ein imaginärer Wafer mit 500 cm 2. Ich schneide 10 Chips davon, jeder Chip 50 cm 2 groß. Einer von ihnen ist kaputt. Ich verwende ihn und ich habe 9 Chips übrig. Jetzt nehme ich den gleichen Wafer und schneide 100 Chips davon, jeder zehnmal so klein, einer davon, wenn er kaputt ist. Ich verwerfe den zerbrochenen Chip, und ich habe noch 99 funktionierende Chips. Das ist ein Bruchteil des Verlusts, den ich sonst hätte haben müssen Chips 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.
Je näher sich der Cache an der CPU befindet, desto schneller kann auf ihn zugegriffen werden.
Dies ist auch leicht zu erklären; Elektrische Signale bewegen sich in der Nähe der Lichtgeschwindigkeit. Das ist zwar schnell, aber immerhin eine endliche Geschwindigkeit. Moderne CPU arbeiten mit GHz-Takten. Das geht auch schnell. Wenn ich eine 4-GHz-CPU nehme, kann sich ein elektrisches Signal etwa 7,5 cm pro Takt bewegen. Das sind 7,5 cm in gerader Linie. (Chips sind alles andere als gerade Verbindungen). In der Praxis benötigen Sie deutlich weniger als 7,5 cm, da die Chips keine Zeit haben, um die angeforderten Daten zu präsentieren und das Signal zurückzusenden.
Unterm Strich möchten wir, dass der Cache so nah wie möglich ist. Was bedeutet große Chips.
Diese beiden müssen ausgewogen sein (Leistung vs. Kosten).
Wo befinden sich die L1-, L2- und L3-Caches in einem Computer?
Unter der Annahme, dass nur PC-Hardware verwendet wird (Mainframes sind ziemlich unterschiedlich, einschließlich der Leistungs-Kosten-Kosten-Balance).
IBM XT
Das ursprüngliche 4,77-MHz-Modul: Kein Cache. Die CPU greift direkt auf den Speicher zu. Ein Lesen aus dem Speicher würde diesem Muster folgen:
- Die CPU legt die Adresse, die sie lesen möchte, auf den Speicherbus und setzt das Leseflag
- Der Speicher legt die Daten auf dem Datenbus ab.
- Die CPU kopiert die Daten vom Datenbus in ihre internen Register.
80286 (1982)
Noch kein Cache. Der Speicherzugriff war für die Versionen mit niedrigerer Geschwindigkeit (6 MHz) kein großes Problem, aber das schnellere Modell lief bis zu 20 MHz und musste beim Zugriff auf den Speicher häufig verzögert werden.
Sie erhalten dann ein Szenario wie dieses:
- Die CPU legt die Adresse, die sie lesen möchte, auf den Speicherbus und setzt das Leseflag
- Der Speicher beginnt, die Daten auf den Datenbus zu legen. Die CPU wartet.
- Der Speicher ist fertig mit dem Abrufen der Daten und ist jetzt auf dem Datenbus stabil.
- Die CPU kopiert die Daten vom Datenbus in ihre internen Register.
Dies ist ein zusätzlicher Schritt beim Warten auf den Speicher. Auf einem modernen System, das problemlos 12 Schritte umfassen kann, haben wir einen Cache .
80386 : (1985)
Die CPUs werden schneller. Sowohl pro Takt als auch bei höheren Taktraten.
RAM wird schneller, aber nicht so viel schneller als CPUs.
Als Ergebnis werden mehr Wartezustände benötigt. Einige Motherboards umgehen dies, indem Cache Hinzufügen (das wäre 1 sein st Level - Cache) auf dem Motherboard.
Ein Lesen aus dem Speicher beginnt nun mit einer Prüfung, ob sich die Daten bereits im Cache befinden. Wenn ja, wird es aus dem viel schnelleren Cache gelesen. Wenn nicht das gleiche Verfahren wie beim 80286
80486 : (1989)
Dies ist die erste CPU dieser Generation, die auf der CPU etwas Cache hat.
Es handelt sich um einen einheitlichen 8-KB-Cache, der für Daten und Anweisungen verwendet wird.
Um diese Zeit wird es üblich, 256 KB schneller statischer Speicher auf dem Motherboard als 2 setzte nd Level - Cache. So 1 st - Level - Cache in der CPU, 2 nd Level - Cache auf dem Motherboard.
80586 (1993)
Der 586 oder Pentium-1 verwendet einen Split-Level-1-Cache. Jeweils 8 KB für Daten und Anweisungen. Der Cache wurde so aufgeteilt, dass die Daten- und Anweisungscaches individuell auf ihre spezifische Verwendung abgestimmt werden konnten. Sie haben noch eine kleine, aber sehr schnell 1 st Cache in der Nähe der CPU und einen größeren, aber langsamer 2 nd - Cache auf dem Motherboard. (In einer größeren Entfernung).
Im gleichen Pentium-1-Bereich produzierte Intel den Pentium Pro ('80686'). Je nach Modell hatte dieser Chip einen On-Board-Cache mit 256 KB, 512 KB oder 1 MB. Es war auch viel teurer, was mit dem folgenden Bild leicht zu erklären ist.
Beachten Sie, dass die Hälfte des Speicherplatzes im Chip vom Cache belegt wird. Und dies ist für das 256-KB-Modell. Technisch war mehr Cache möglich, und einige Modelle wurden mit 512 KB und 1 MB Cache erstellt. Der Marktpreis dafür war hoch.
Beachten Sie auch, dass dieser Chip zwei Chips enthält. Eine mit der tatsächlichen CPU und 1 st Cache und einer zweiten Düse mit 256 KB 2 nd - Cache.
Pentium-2
Das Pentium 2 ist ein Pentium-Pro-Core. Aus wirtschaftlichen Gründen kein 2 nd ist Cache in der CPU. Stattdessen, was für CPU (und 1 aa CPU uns eine Platine mit separaten Chips verkauft st Cache) und 2 nd - Cache.
Da die Technologie fortschreitet und wir beginnen Chips mit kleineren Komponenten setzen schafft es den 2 setzt finanziell möglich wird nd Cache zurück in den aktuellen CPU - Den. Es gibt jedoch immer noch eine Spaltung. Sehr schnelle 1 st Cache kuschelte sich an die CPU auf. Mit einer 1 st Cache pro CPU - Kern und eine größere, aber weniger schnell 2 nd Cache neben den Kern.
Pentium-3
Pentium-4
Dies ändert sich nicht für Pentium-3 oder Pentium-4.
Um diese Zeit haben wir ein praktisches Limit erreicht, wie schnell wir CPUs takten können. Ein 8086 oder ein 80286 benötigte keine Kühlung. Ein Pentium-4, das mit 3,0 GHz betrieben wird, erzeugt so viel Wärme und verbraucht so viel Energie, dass es praktischer wird, zwei separate CPUs auf die Hauptplatine zu setzen, anstatt eine schnelle.
(Zwei 2,0-GHz-CPUs würden weniger Strom verbrauchen als eine identische 3,0-GHz-CPU, könnten jedoch mehr Arbeit leisten).
Dies kann auf drei Arten gelöst werden:
- Machen Sie die CPUs effizienter, damit sie mehr mit der gleichen Geschwindigkeit arbeiten.
- Verwenden Sie mehrere CPUs
- Verwenden Sie mehrere CPUs in einem "Chip".
1) Ist ein fortlaufender Prozess. Es ist nicht neu und wird nicht aufhören.
2) Wurde früh erledigt (z. B. mit zwei Pentium-1-Motherboards und dem NX-Chipsatz). Bisher war dies die einzige Möglichkeit, einen schnelleren PC zu bauen.
3) Erfordert CPUs, bei denen mehrere "CPU-Kern" in einen einzigen Chip eingebaut sind. (Wir haben diese CPU dann als Dual-Core-CPU bezeichnet, um die Verwirrung zu erhöhen. Vielen Dank für das Marketing :)
Heutzutage bezeichnen wir die CPU nur als "Kern", um Verwirrung zu vermeiden.
Sie erhalten jetzt Chips wie das Pentium-D (Duo), bei dem es sich im Grunde 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 die zwei großen Bereiche in diesem Bild?
Es stellt sich heraus, dass wir diese zwei teilen können nd Cache zwischen den beiden CPU - Kerne. Geschwindigkeit würde sinken leicht, aber ein 512KiB geteilt 2 nd Cache ist oft schneller als das Hinzufügen von zwei unabhängigen 2 nd Level - Caches der halben Größe.
Das ist wichtig für deine Frage.
Dies bedeutet, dass, wenn Sie etwas von einem CPU-Kern lesen und später versuchen, es von einem anderen Kern zu lesen, der den gleichen Cache verwendet, mit dem Sie einen Cache-Treffer erzielen. Auf den Speicher muss nicht zugegriffen werden.
Da Programme zwischen CPUs migrieren, können Sie abhängig von der Auslastung, der Anzahl der Kerne und dem Scheduler zusätzliche Leistung erzielen, indem Sie Programme, die dieselben Daten verwenden, an dieselbe CPU (Cache-Treffer unter L1 und niedriger) oder an dieselben CPUs anpinnen L2-Cache gemeinsam nutzen (und somit Fehlschüsse auf L1, aber Treffer auf L2-Cache-Lesevorgänge erhalten).
Auf späteren Modellen sehen Sie daher gemeinsam genutzte Level-2-Caches.
Wenn Sie für moderne CPUs programmieren, haben Sie zwei Möglichkeiten:
- Kümmern Sie sich nicht. Das Betriebssystem sollte in der Lage sein, Dinge zu planen. Der Scheduler hat einen großen Einfluss auf die Leistung des Computers, und die Mitarbeiter haben sich sehr viel Mühe gegeben, dies zu optimieren. Wenn Sie nichts Ungewöhnliches tun oder für ein bestimmtes PC-Modell optimieren, ist der Standard-Scheduler besser geeignet.
- Wenn Sie nur ein wenig Leistung benötigen und schnellere Hardware keine Option ist, sollten Sie die Laufflächen belassen, die auf dieselben Daten im selben Core oder auf einem Core mit Zugriff auf einen gemeinsam genutzten Cache zugreifen.
Ich weiß, dass ich L3-Cache noch nicht erwähnt habe, aber sie unterscheiden sich nicht. Ein L3-Cache funktioniert auf dieselbe Weise. Größer als L2, langsamer als L2. Und es wird oft zwischen Kernen geteilt. Wenn es vorhanden ist, ist es viel größer als der L2-Cache (sonst wäre es nicht sinnvoll) und es wird oft mit allen Kernen gemeinsam genutzt.