Wo genau befinden sich L1-, L2- und L3-Caches im Computer?

Beginnen wir damit:

Ich denke, die neuesten SMP-Prozessoren verwenden 3-Ebenen-Caches, daher möchte ich die Hierarchie auf Cache-Ebene und ihre Architektur verstehen.

Um Caches zu verstehen, müssen Sie einige Dinge wissen:

Eine CPU hat Register. Werte, die direkt verwendet werden können. Nichts ist schneller.

Wir können einem Chip jedoch keine unendlichen Register hinzufügen. Diese Dinge nehmen Platz ein. Wenn wir den Chip größer machen, wird es teurer. Das liegt zum Einen daran, dass wir einen größeren Chip (mehr Silizium) brauchen, aber auch daran, dass die Anzahl der Chips mit Problemen zunimmt.

(Bild ein imaginärer Wafer mit 500 cm2. Ich schneide 10 Chips daraus, jeder Chip 50cm2 groß. Einer von ihnen ist kaputt. Ich verwerfe es und ich bin es links 9 Arbeits Chips. Nehmen Sie nun den gleichen Wafer und ich schneide daraus 100 Chips, die jeweils zehnmal so klein sind. Einer von ihnen, wenn gebrochen. Ich werfe den kaputten Chip weg und ich habe noch 99 funktionierende Chips. Das ist ein Bruchteil des Verlustes, den ich sonst gehabt hätte. Um die größeren Chips zu kompensieren, müsste ich höhere Preise verlangen. Mehr als nur der Preis für das zusätzliche Silizium)

Dies ist einer der Gründe, warum wir kleine, erschwingliche Chips wollen.

Je näher der Cache jedoch an der CPU liegt, desto schneller kann darauf zugegriffen werden.

Dies ist auch leicht zu erklären; Elektrische Signale bewegen sich in der Nähe der Lichtgeschwindigkeit. Das ist schnell, aber immer noch eine endliche Geschwindigkeit. Moderne CPU arbeiten mit GHz-Takt. Das geht auch schnell. Wenn ich eine 4-GHz-CPU nehme, kann ein elektrisches Signal pro Takt etwa 7,5 cm zurücklegen. Das ist 7,5 cm in gerader Linie. (Chips sind alles andere als gerade Verbindungen). In der Praxis benötigen Sie deutlich weniger als diese 7.5 cm, da die Chips dadurch keine Zeit haben, die angeforderten Daten anzuzeigen und das Signal zurückzusenden.

unterm Strich wollen wir den Cache physisch so nah wie möglich. Was bedeutet, große Chips.

Diese beiden müssen ausgeglichen werden (Leistung vs. Kosten).

Wo genau befinden sich die L1-, L2- und L3-Caches in einem Computer?

Vorausgesetzt, PC-Stil nur Hardware (Mainframes sind sehr unterschiedlich, auch in der Leistung vs. kosten balance);

IBM XT
Die original 4,77 Mhz ein: Keine cache. 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 bestätigt das Leseflag
  • 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 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 bestätigt das Leseflag
  • Der Speicher beginnt, die Daten auf den Datenbus zu legen. Die CPU wartet.
  • Der Speicher hat die Daten erhalten und ist jetzt stabil auf dem Datenbus.
  • Die CPU kopiert die Daten vom Datenbus in ihre internen Register.

Dies ist ein zusätzlicher Schritt, der auf den Speicher gewartet wird. Auf einem modernen System, das leicht 12 Schritte sein kann, weshalb wir Cache haben.

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 sie Cache (das wäre 1st Level Cache) auf dem Motherboard hinzufügen.

Ein Lesen aus dem Speicher beginnt nun mit der Prüfung, ob die Daten bereits im Cache sind. Wenn ja, wird es aus dem viel schnelleren Cache gelesen. Wenn nicht das gleiche Verfahren wie bei der 80286

80486: (1989)
Dies ist die erste CPU dieser Generation, die einen Cache auf der CPU hat.
Es ist ein 8KB Unified Cache, was bedeutet, dass es für Daten und Anweisungen verwendet wird.

Um diese Zeit wird es üblich, 256KB schnellen statischen Speicher als 2nd Level Cache auf das Motherboard zu legen. Also 1st Level Cache auf der CPU, 2nd Level Cache auf dem Motherboard.

486 motherboard mit CPU-Standort und 2nd-Level-Cache markiert

80586 (1993)
Der 586 oder Pentium-1 verwendet einen Split-Level-1-Cache. 8 KB für Daten und Anweisungen. Der Cache wurde aufgeteilt, so dass die Daten- und Anweisungscaches individuell auf ihre spezifische 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. (In größerer physischer Entfernung).

Im gleichen Pentium 1 Bereich produzierte Intel den Pentium Pro (‚80686‘). Je nach Modell hatte dieser Chip einen 256Kb, 512KB oder 1MB Cache an Bord. Es war auch viel teurer, was mit dem folgenden Bild leicht zu erklären ist.

Bild einer Pentium Pro CPU, 256KB Cache Modell

Beachten Sie, dass die Hälfte des Speicherplatzes im Chip vom Cache belegt wird. Und das ist für das 256KB-Modell. Mehr Cache war technisch möglich und einige Modelle wurden mit 512KB und 1MB Caches produziert. Der Marktpreis dafür war hoch.

Beachten Sie auch, dass dieser Chip zwei Dies enthält. Einer mit der tatsächlichen CPU und dem 1. Cache und ein zweiter Die mit 256 KB 2. Cache.

Pentium-2

Der Pentium 2 ist ein Pentium Pro Core. Aus Spargründen befindet sich kein 2. Cache in der CPU. Stattdessen wird eine CPU mit einer Platine mit separaten Chips für CPU (und 1. Cache) und 2. Cache verkauft.

Mit fortschreitender Technologie und der Entwicklung von Chips mit kleineren Komponenten wird es finanziell möglich, den 2. Cache wieder in den eigentlichen CPU-Chip einzubauen. Es gibt jedoch immer noch eine Spaltung. Sehr schneller 1. Cache kuschelte sich an die CPU. Mit einem 1. Cache pro CPU-Kern und einem größeren, aber weniger schnellen 2. Cache neben dem Kern.

Bild einer Pentium 2 'CPU' (sowohl mit als auch ohne Abdeckung)

Pentium-3
Pentium-4
Dies ändert sich nicht für den Pentium-3 oder den Pentium-4.

Um diese Zeit haben wir eine praktische Grenze erreicht, wie schnell wir CPUs takten können. Ein 8086 oder ein 80286 brauchten keine Kühlung. Ein Pentium-4 mit 3,0 GHz produziert so viel Wärme und verbraucht so viel Strom, dass es praktischer wird, zwei separate CPUs auf das Motherboard zu legen, anstatt eine schnelle.

(Zwei 2,0-GHz-CPUs würden weniger Strom verbrauchen als eine einzelne identische 3,0-GHz-CPU, könnten aber mehr Arbeit leisten).

Dies könnte auf drei Arten gelöst werden:

  1. Machen Sie die CPUs effizienter, damit sie mehr Arbeit mit der gleichen Geschwindigkeit erledigen.
  2. Mehrere CPUs verwenden
  3. Mehrere CPUs im selben ‚Chip‘ verwenden.

1) Ist ein fortlaufender Prozess. Es ist nicht neu und es wird nicht aufhören.

2) Wurde früh gemacht (z.B. mit Dual Pentium-1 Mainboards und dem NX Chipsatz). Bisher war das die einzige Möglichkeit, einen schnelleren PC zu bauen.

3) Erfordert CPUs, bei denen mehrere CPU-Kerne in einem einzigen Chip integriert sind. (Wir nannten diese CPU dann eine Dual-Core-CPU, um die Verwirrung zu erhöhen. Danke Marketing 🙂 )

Heutzutage bezeichnen wir die CPU nur noch als ‚Kern‘, um Verwechslungen zu vermeiden.

Sie erhalten jetzt Chips wie den Pentium-D (Duo), bei dem es sich im Grunde um zwei Pentium-4-Kerne auf demselben Chip handelt.

 Früher Pentium-D (2 P4 Kerne)

Erinnern Sie sich an das Bild des alten Pentium-Pro? Mit der riesigen Cache-Größe?
Sehen Sie die beiden großen Bereiche in diesem Bild?

Es stellt sich heraus, dass wir diesen 2. Cache zwischen beiden CPU-Kernen teilen können. Die Geschwindigkeit würde leicht sinken, aber ein gemeinsam genutzter 512-KB-2nd-Cache ist oft schneller als das Hinzufügen von zwei unabhängigen 2nd-Level-Caches mit halber Größe.

Dies ist wichtig für Ihre Frage.

Dies 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 teilt. Auf den Speicher muss nicht zugegriffen werden.

Da Programme zwischen CPUs migrieren, können Sie abhängig von der Last, der Anzahl der Kerne und dem Scheduler zusätzliche Leistung erzielen, indem Sie Programme, die dieselben Daten verwenden, an dieselbe CPU anheften (Cache-Treffer auf L1 und niedriger) oder auf denselben CPUs, die sich den L2-Cache teilen (und somit Fehler auf L1 erhalten, aber Treffer auf L2-Cache-Lesevorgänge).

Daher werden bei späteren Modellen freigegebene Level-2-Caches angezeigt.

 Bild einer Open Core2 CPU

Wenn Sie für moderne CPUs programmieren, haben Sie zwei Möglichkeiten:

  1. Mach dir keine Sorgen. Das Betriebssystem sollte in der Lage sein, Dinge zu planen. Der Scheduler hat einen großen Einfluss auf die Leistung des Computers und die Leute haben viel Mühe darauf verwendet, dies zu optimieren. Wenn Sie nicht etwas Seltsames tun oder für ein bestimmtes PC-Modell optimieren, sind Sie mit dem Standardplaner besser dran.
  2. Wenn Sie das letzte Bisschen Leistung benötigen und schnellere Hardware keine Option ist, versuchen Sie, die Laufflächen, 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 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 geteilt.

modernCPUwithL3.png

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.