Warum ist der CPU-Cache so schnell?


58

Was macht den CPU-Cache so viel schneller als den Hauptspeicher? Ich kann einige Vorteile in einem gestuften Cache-System sehen. Es ist sinnvoll, einen kleineren Cache schneller zu durchsuchen. Aber es muss noch mehr geben.


2
Was meinst du mit Hauptspeicher ?
Marcocs

1
@ marcocs aus Gründen der Übersichtlichkeit bearbeitet. Ich beziehe mich auf CPU-Cache-Speicher und Hauptsystemspeicher, dh die austauschbaren Dimms auf den meisten Motherboards.
ConditionRacer


2
@ratchetfreak Uh ... OP fragt ziemlich eindeutig nach einer nahe liegenden Ursache, nicht nach einer endgültigen Ursache.
Kyle Strand

1
Wow, ich hätte nicht gedacht, dass ich jemals meinen Abschluss in Computertechnik machen würde. Die akzeptierte Antwort ist keine wirkliche Antwort. Dies liegt daran, dass der CPU-Cache mit einer viel höheren Taktrate (der CPU-Taktrate von etwa 4 GHz) arbeitet, während der Hauptspeicher mit der Bustaktrate (etwa 1600 MHz) arbeitet. Darüber hinaus kann der CPU-Cache 4 Taktzyklen lesen, der System-RAM benötigt jedoch möglicherweise 100 Systemtaktzyklen. Außerdem besteht ein Konflikt zwischen dem System-RAM und anderen Peripheriegeräten wie der Festplatte oder dem Netzwerk, während der CPU-Cache dediziert ist. Je länger der Draht, desto langsamer die Taktrate, mit der er arbeiten kann. tinyurl.com/zkdsstd
Chloe

Antworten:


115

Im Falle eines CPU-Cache ist dieser schneller, da er sich auf dem gleichen Chip wie der Prozessor befindet. Mit anderen Worten, die angeforderten Daten müssen nicht an den Prozessor weitergeleitet werden. es ist schon da

Wenn sich der Cache auf einer Festplatte befindet, ist er schneller, weil er sich im Solid-State-Speicher befindet und nicht noch auf den rotierenden Platten.

Im Falle des Caches auf einer Website ist dies schneller, da die Daten bereits aus der Datenbank abgerufen wurden (die sich in einigen Fällen irgendwo auf der Welt befinden kann).

Es geht also hauptsächlich um die Lokalität . Cache eliminiert den Datentransferschritt .

Lokalität ist eine ausgefallene Art, Daten zu beschreiben, die zeitlich oder räumlich "nah beieinander" sind. Das Zwischenspeichern mit einem kleineren, schnelleren (aber im Allgemeinen teureren) Speicher funktioniert, da in der Regel relativ wenige Gesamtdaten die Daten sind, auf die am häufigsten zugegriffen wird.

Weiterer
Lesecache (Computing) auf Wikipedia


29
Ich denke das ist eine gute Antwort. Es kann jedoch erwähnenswert sein, hinzuzufügen, dass es auch eine Kostenhierarchie für den Cache gibt: Netzwerkspeicher ist billiger als eine lokale Festplatte, was billiger als RAM ist, was viel billiger als der On-CPU-Cache ist. Wäre dies nicht der Fall, würden wir nur CPUs mit 120 GB On-Chip-Speicher herstellen und damit fertig werden.
Charles E. Grant

1
@ConditionRacer: Gleiche Gründe. L1 ist schneller, aber teurer, so dass Sie ein wenig von sehr teurem L1 und mehr von weniger teurem, aber langsamerem L2 erhalten. Siehe auch stackoverflow.com/questions/3699582/…
Robert Harvey

9
„Warum ist L1 schneller als L2“ - die Frage aus wird Thema für Programmers.SE und sollte auf Electronics.SE gebeten werden
mattnz

5
@ConditionRacer IIRC, das hängt mit der Technologie zusammen, die zum Implementieren des Speichers verwendet wird. Ich denke, L2 ist ein On-Chip-DRAM, während L1 ein SRAM oder so ähnlich ist. viel teurer, aber viel schneller. Es ist über ein Jahrzehnt her, dass ich im CPU-Design gearbeitet habe ...
Donal Fellows

4
@ CharlesE.Grant: Obwohl die Kostenhierarchie ein gutes Beispiel ist, gibt es einen weiteren Grund, warum wir nicht über 120 GB On-Chip-Cache verfügen: Für die Adressierung eines größeren Speichers sind größere Adressen erforderlich, also entweder größere Anweisungen oder mehr CPU-Zyklen. Um also am schnellsten zu sein, muss die Anzahl der Register relativ klein bleiben. Natürlich könnte man neben den Registern auch On-Chip-Speicher haben , aber die schnellste Schicht muss klein bleiben, sonst wäre es nicht mehr so ​​schnell.
vsz

33

Es ist schneller, weil es näher ist und weil es SRAM ist, nicht DRAM.

SRAM ist und kann erheblich schneller als DRAM sein. Die Werte werden statisch gehalten (das S in S RAM), so dass sie nicht aktualisiert werden müssen, was Zyklen wegnimmt. DRAM ist dynamisch, wie kleine wiederaufladbare Batterien. Sie müssen diese regelmäßig aufladen, damit sie nicht abfließen und zu Nullen werden. Dies stiehlt die Zykluszeit zusätzlich dazu, wie Sie auf die Bits usw. zugreifen müssen.

Befindet sich der Prozessor auf dem gleichen Chip oder näher am Prozessor, verringert sich die Umlaufzeit, und sowohl L1 als auch L2 sind aus Sicht des Zugriffs schneller als DRAM.

Auf SRAM kann schneller zugegriffen werden als auf DRAM, und die Caches befinden sich normalerweise auf dem Chip oder näher oder auf schnelleren Bussen als auf dem DRAM, wodurch die Zugriffszeit ebenfalls schneller wird.


1
SRAM ist auch leistungshungriger pro Bit, so dass Sie Radiatoren hinzufügen müssen, und alles, was mit Batterie betrieben wird, würde darunter leiden.
9000,

1
Ganz zu schweigen von der Tatsache, dass SRAM durch die Vergrößerung langsamer wird.
Darkhogg

vereinbart, mehr Kraft und langsamer im Vergleich zu anderen SRAM. Ich denke, es sind 4 Transistoren pro Bit für Sram und 1 pro Bit für Dram. dram stützt sich auf die kapazität im fet, während sram sich auf eine gute altmodische logik stützt. Sie müssen also alle diese Transistoren ständig mit Strom versorgen und nicht nur die Ladung periodisch pumpen.
old_timer

4
SRAM in Caches ist im Allgemeinen 6T, nicht 4T. Auch SRAM (sicherlich die 6T-Variante) ist energieeffizienter. Die wirkliche Leistungsaufnahme im DRAM ist der Auffrischungszyklus, und der SRAM benötigt dies einfach nicht. SRAM-Transistoren ziehen beim Schalten Strom, der DRAM-Kondensator leckt ständig. Wenn Sie die undichte Kappe des DRAM ersetzen, erhalten Sie ein EEPROM, aber das ist nicht schnell: Wenn die Ladung nur schwer auslaufen kann, ist es auch schwierig, sie auf die normale Weise wieder herauszubekommen.
MSalters

@dwelch CMOS-FETs verbrauchen keine Energie, wenn sie sich im offenen oder geschlossenen Zustand befinden. Daher ist das Argument zum Energieverbrauch ungültig. Darüber hinaus ist es die CMOS-Logik, die die CPUs dazu bringt, den größten Teil ihrer Leistung zu verbrauchen - die Stromspitzen im Zwischenzustand (nicht 1 und nicht 0). Die Situation ist also umgekehrt zu dem, was Sie sagen :)
Ruslan

21

Eine Sache, die ausdrücklich erwähnt werden sollte, ist der Einfluss der Lichtgeschwindigkeit. In diesem Video zeigt Grace Hopper ein etwa einen Meter langes Stück Draht, mit dem sich ein elektrisches Signal in einer Nanosekunde * fortbewegen kann. Wenn eine CPU mit 3 GHz arbeitet, bedeutet dies eine Entfernung von 4 Zoll pro Taktzyklus. Dies ist eine harte physikalische Beschränkung der Speicherzugriffsgeschwindigkeiten. Dies ist ein großer Teil der Gründe, warum es möglich ist, in der Nähe der CPU zu sein (wie es der L1-Cache tut) Gedächtnis, um schneller zu sein.

BEARBEITEN * tatsächlich, wie weit Licht im Vakuum wandern kann, die Entfernung durch Kupfer / Silizium ist geringer.


2
Harte Grenze für Kupfer. Das ist ein guter Punkt, ich habe nicht bedacht, wie lächerlich schnell moderne Prozessoren sind.
ConditionRacer

@ConditionRacer Ich habe gerade eine Korrektur hinzugefügt, 11,8 Zoll ist Licht im Vakuum.
Matthew Finlay

2
Sie müssen diese Zahl halbieren, da Sie einen Roundtrip zum Abrufen des Speichers benötigen. Es sind also nur 5 cm, nicht 10 cm pro Latenzzyklus im Vakuum .
CodesInChaos

2
Die Lichtgeschwindigkeit ist der Grund, warum der Hauptspeicherbustakt vor einigen Jahren nicht mehr schneller wurde (2000). Dies ist kein direkter Effekt - es hat damit zu tun, dass CMOS-Logiksignale bei Busfrequenzen keine perfekten Rechteckwellen mehr sind - aber c zeigt prominent in der Mathematik.
zwol

5

Andere Antworten deckten bereits alle relevanten Bits ab: Lokalität (und die damit verbundenen Datenübertragungskosten, Busbreite und -uhr usw.); Lichtgeschwindigkeit (wiederum verbunden mit den Übertragungskosten sowie der Busbreite und dem Durchsatz); verschiedene Speichertechnologien (SRAM vs. DRAM). All dies im Lichte des Preis-Leistungs-Verhältnisses .

Ein Punkt, der weggelassen wurde und gerade in Darkhoggs Kommentar erwähnt wurde: Größere Caches haben eine bessere Trefferquote, aber eine längere Latenz. Es wurden mehrere Cache-Ebenen eingeführt, um diesen Kompromiss zu beheben.

Zu diesem Punkt gibt es eine hervorragende Frage und Antwort zur electronics SE

Aus den Antworten scheint mir ein hervorzuhebender Punkt zu sein: Die Logik, die alle erforderlichen Operationen für ein Cache-Lesen ausführt, ist nicht so einfach (insbesondere, wenn der Cache satzassoziativ ist, wie die meisten heutigen Caches). Es erfordert Tore und Logik. Also, auch wenn wir Kosten ausschließen und Platz sparen

Wenn jemand versuchen würde, einen lächerlich großen L1-Cache zu implementieren, würde die Logik, die alle erforderlichen Operationen für ein Cache-Lesen ausführt, ebenfalls groß. Irgendwann wäre die Ausbreitungsverzögerung durch all diese Logik zu lang und die Operationen, die zuvor nur einen einzigen Taktzyklus in Anspruch genommen hatten, müssten in mehrere Taktzyklen aufgeteilt werden. Dies erhöht die Latenz.


5

In den anderen Antworten werden viele gute Punkte angesprochen, aber ein Faktor scheint zu fehlen: die Latenz bei der Adressdecodierung.

Das Folgende ist eine enorme Vereinfachung der Funktionsweise der Speicheradressdecodierung, gibt jedoch eine gute Vorstellung davon, warum große DRAM-Chips im Allgemeinen recht langsam sind.

Wenn der Prozessor auf den Speicher zugreifen muss, sendet er einen Befehl an den Speicherchip, um das spezifische Wort auszuwählen, das er verwenden möchte. Dieser Befehl wird als Spaltenadressauswahl bezeichnet (Zeilenadressen werden vorerst ignoriert). Der Speicherchip muss nun die angeforderte Spalte aktivieren, indem er die Adresse über eine Kaskade von Logikgattern sendet, um einen einzelnen Schreibvorgang durchzuführen, der mit allen Zellen in der Spalte verbunden ist. Abhängig davon, wie es implementiert ist, gibt es eine gewisse Verzögerung für jedes Adressbit, bis das Ergebnis am anderen Ende ausgegeben wird. Dies wird als CAS-Latenzzeit des Speichers bezeichnet. Da diese Bits nacheinander geprüft werden müssen, dauert dieser Vorgang viel länger als ein Prozessorzyklus (auf den normalerweise nur wenige Transistoren nacheinander warten müssen). Es dauert auch viel länger als ein Buszyklus (der normalerweise ein paar Mal langsamer ist als ein Prozessorzyklus). Ein CAS-Befehl auf einem typischen Speicherchip nimmt wahrscheinlich die Größenordnung von 5 ns an (IIRC - es ist eine Weile her, seit ich mir die Zeitabläufe angesehen habe), was mehr als eine Größenordnung langsamer als ein Prozessorzyklus ist.

Glücklicherweise teilen wir Adressen in drei Teile (Spalte, Zeile und Bank) auf, sodass jeder Teil kleiner sein und diese Teile gleichzeitig verarbeiten kann, da sonst die Latenz noch länger wäre.

Der Prozessor-Cache weist dieses Problem jedoch nicht auf. Es ist nicht nur viel kleiner, so dass die Adressübersetzung einfacher ist, es muss auch nicht mehr als ein kleines Fragment der Adresse übersetzt werden (in einigen Varianten überhaupt keine), da es assoziativ ist. Dies bedeutet, dass sich neben jeder zwischengespeicherten Speicherzeile zusätzliche Speicherzellen befinden, die einen Teil (oder die gesamte) Adresse speichern. Dies macht den Cache natürlich noch teurer, aber es bedeutet, dass alle Zellen abgefragt werden können, um zu sehen, ob sie über die bestimmte Speicherzeile verfügen, die wir gleichzeitig benötigen, und dass dann die einzige (hoffentlich), die die richtigen Daten hat, diesen Speicherauszug erstellt auf einen Bus, der den gesamten Speicher mit dem Hauptprozessorkern verbindet. Dies geschieht in weniger als einem Zyklus, weil es viel einfacher ist.


-2

Eine der Philosophien, die ich studiert habe, war das Erreichen des maximalen Durchsatzes bei minimaler Hardwarebewegung, wenn wir über einen Cache-basierten Speicher sprechen, sei es für diesen Zweck ein CPU-Cache, ein Puffer-Cache oder ein Speicher-Cache. Das Grundmotiv ist erreicht, wenn es die geringste oder keine Hardwarebewegung zum Abrufen / Lesen / Schreiben von Daten gibt und die Operation schneller abgeschlossen ist.

Die Datenübertragung von Festplatte -> Hauptspeicher (RAM) (temporärer Speicher) -> CPU-Cache (kleinerer temporärer Speicher in der Nähe der CPU für häufig aufgerufene Daten) -> CPU (Verarbeitung).

Der CPU-Cache ist ein kleinerer, schnellerer Speicherbereich, in dem Kopien der Daten aus den zuletzt verwendeten Hauptspeicherbereichen gespeichert werden.

Der Puffer-Cache ist ein Hauptspeicherbereich, in dem Kopien der Daten von den zuletzt verwendeten Speicherorten gespeichert werden.

Der Browser-Cache ist ein Verzeichnis oder ein ähnlicher Bereich, in dem Kopien der Daten der zuletzt von Benutzern besuchten Websites gespeichert werden.

Referenz: Funktionsweise des Computerspeichers


"Betriebssystemphilosophie ist ..." - ist das nur Ihre Meinung oder können Sie es irgendwie sichern?
gnat

Wurde darüber während des Studiums von Maurice Bach unterrichtet. Leider keine unterstützende Dokumentation. Bearbeitet ..
roshan4074

5
howstuffworks ist bekanntermaßen unzuverlässig, um zuverlässige technische Informationen zu erhalten. Sie sind gut für grobe Vereinfachungen, die der Durchschnittsmensch verstehen kann, aber das war es auch schon.
jwenting
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.