Warum ist der L1-Cache schneller als der L2-Cache?

Ich versuche zu verstehen, warum bestimmte CPU-Cache-Speicher schneller sind als andere. Beim Vergleich von Cache-Speicher mit etwas wie Hauptspeicher gibt es Unterschiede im Speichertyp (SRAM vs. DRAM) und Lokalitätsprobleme (On-Chip vs. Notwendigkeit, einen Speicherbus zu durchlaufen), die die Zugriffsgeschwindigkeiten beeinflussen können. Aber L1 und L2 befinden sich im Allgemeinen auf demselben Chip oder zumindest auf demselben Chip, und ich denke, dass es sich um denselben Speichertyp handelt. Warum ist L1 also schneller?

Weil es so gebaut ist.
Es gibt mehrere Möglichkeiten, den gleichen RAM-Typ zu bauen. Einige Möglichkeiten führen zu RAM, das schneller ist als RAM, das auf andere Weise erstellt wurde.
Der gleiche Grund, warum Ihr DDR-RAM schneller ist als Ihre Festplatte ...
verwandt: Meine Antwort auf und SO Frage zu Cache-Größen erklärt auch einige Gründe für den Kompromiss zwischen Geschwindigkeit und Stromverbrauch für mehrstufige Caches. Grundsätzlich kostet es Strom und Die-Fläche, einen Cache superschnell zu machen, um mehr parallel zu tun, und ist nicht mit den großen Größen / Assoziativitäten kompatibel, die Sie in einem Cache der letzten Ebene wünschen.

Antworten (4)

Nein, es handelt sich nicht um dieselbe Art von RAM, obwohl sie sich auf demselben Chip befinden, der denselben Herstellungsprozess verwendet.

Von allen Caches muss der L1-Cache die schnellstmögliche Zugriffszeit (geringste Latenz) haben, im Vergleich dazu, wie viel Kapazität er haben muss, um eine angemessene "Treffer"-Rate bereitzustellen. Daher wird es mit größeren Transistoren und breiteren Metallbahnen gebaut, wobei Platz und Leistung gegen Geschwindigkeit eingetauscht werden. Die Caches auf höherer Ebene müssen über höhere Kapazitäten verfügen, können es sich aber leisten, langsamer zu sein, sodass sie kleinere Transistoren verwenden, die dichter gepackt sind.

Das ist, was ich suche, danke. Kennen Sie gute Quellen, wo ich mehr über die Unterschiede nachlesen kann?
Nein, nicht aus dem Stegreif. Die Details dieser Platz-/Leistungs-/Zeit-Kompromisse sowie Entscheidungen bezüglich Cache-Kapazität und -Architektur sind sehr eng mit den proprietären Details der Herstellerprozesse verbunden, sodass sehr wenig (wenn überhaupt) darüber veröffentlicht wird. Ich kann nur allgemein sprechen.
L1 ist auch kleiner, was bedeutet, dass die Signalausbreitung darüber weniger Taktzyklen dauert: Oft wird die Größe von L1 als der größte Speicher festgelegt, auf den in 1 (oder 2) Takten zugegriffen werden kann.
Zusätzlich zu Brian Drummonds Argument verwendet L1 typischerweise auch einen parallelen Daten-Tag-Zugriff. L2 greift in der Regel zuerst auf Tags zu (um festzustellen, in welche Richtung ein Treffer erfolgt) und dann auf Daten, wodurch die Latenz erhöht, aber Energie gespart wird (signifikant angesichts größerer Größe, höherer Assoziativität und höherer Fehlschlagrate). (Der L2-Zugriff beginnt normalerweise auch, nachdem ein L1-Fehlschlag bestätigt wurde, was die effektive Latenz erhöht.)
@BrianDrummond - kleiner sowohl in Bezug auf die Drahtlast als auch in Bezug auf die Gate-Tiefe (ich glaube nicht, dass dies aus Ihrem Kommentar ersichtlich ist).

L1 wird normalerweise als Speicher für decodierte Anweisungen verwendet, während L2 ein allgemeiner Cache für einen einzelnen Kern ist. Je niedriger der Cache, desto kleiner ist er und schneller ist er normalerweise. Als grobe Faustregel für PC-Prozessoren gilt:

L1-Cache: 2–3 Taktzykluszugriff

L2-Cache: Zugriff auf ~10 Taktzyklen

L3-Cache: Zugriff auf ~20–30 Taktzyklen

Das Design des L1-Cache sollte darauf ausgerichtet sein, die Trefferrate (die Wahrscheinlichkeit, dass sich die gewünschte Befehlsadresse oder Datenadresse im Cache befindet) zu maximieren, während die Cache-Latenz so gering wie möglich gehalten wird. Intel verwendet einen L1-Cache mit einer Latenz von 3 Zyklen. Der L2-Cache wird von einem oder mehreren L1-Caches gemeinsam genutzt und ist oft viel, viel größer. Während der L1-Cache darauf ausgelegt ist, die Trefferrate zu maximieren, ist der L2-Cache darauf ausgelegt, die Fehltrefferstrafe (die Verzögerung, die entsteht, wenn ein L1-Fehltreffer auftritt) zu minimieren. Bei Chips mit L3-Caches ist der Zweck spezifisch für das Design des Chips. Für Intel tauchten L3-Caches erstmals 2002 in 4-Wege-Multiprozessorsystemen (Pentium 4 Xeon MP-Prozessoren) auf. L3-Caches in diesem Sinne reduzierten Verzögerungen in Multithread-Umgebungen erheblich und entlasteten den FSB. Damals,

Zitat hier aus der Antwort von "Pinhedd".

L1 wird im Allgemeinen auch für Daten verwendet, aber es stimmt, dass L1-Daten und L1-Anweisungen oft getrennt sind, während L2 gemeinsam genutzt wird: programers.stackexchange.com/questions/44731/… (ein Grund, warum es gemeinsam genutzt werden kann, ist, dass es mehr Möglichkeiten gibt ).
Es ist üblich, dass Prozessoren separate Befehls- und Datencaches auf L1-Ebene haben. Dies gilt sicherlich für spätere x86- und SPARC-Chips. Und einige L1-Anweisungs-Caches speichern keine decodierten Anweisungen. Der Pentium 4 speicherte decodierte Anweisungen, aber dann kehrte Intel zu regulären I-Caches zurück und fügte kürzlich decodierte Anweisungs-Caches wieder in ihre Chips ein.

Es gibt mehrere Gründe, warum die Geschwindigkeit umgekehrt proportional zur Größe ist. Das erste, was mir in den Sinn kommt, ist die physische Dominanz von Leitern, bei denen die Signalausbreitung auf einen Faktor der Lichtgeschwindigkeit beschränkt ist. Eine Operation kann so lange dauern, wie ein elektrisches Signal benötigt, um die längste Strecke innerhalb der Speicherkachel und zurück zurückzulegen. Ein weiterer verwandter Grund ist die Trennung von Taktdomänen. Jede CPU betreibt ihren eigenen Taktgenerator, wodurch die CPU mit Multi-GHz-Takten laufen kann. Der Level-1-Cache läuft mit und wird mit der CPU-Uhr synchronisiert, die die schnellste im System ist. Der Level-2-Cache hingegen muss viele CPUs bedienen und läuft in einer anderen (langsameren) Taktdomäne. Nicht nur der L2-Takt ist langsamer (größere Kachel), sondern das Überqueren einer Taktdomänengrenze fügt eine weitere Verzögerung hinzu. Dann gibt es natürlich die Fan-Out-Probleme (bereits erwähnt).

Abgesehen von den inhärenten Leistungsmerkmalen spielt auch die Lokalität eine Rolle (L1 liegt näher an der CPU). Nach Was jeder Programmierer über Speicher wissen sollte :

Es ist interessant festzustellen, dass für den On-Die-L2-Cache ein großer Teil (wahrscheinlich sogar der Großteil) der Zugriffszeit durch Leitungsverzögerungen verursacht wird. Dies ist eine physikalische Einschränkung, die sich mit zunehmender Cache-Größe nur verschlimmern kann. Nur eine Prozessverkleinerung (zum Beispiel von 60 nm für Merom auf 45 nm für Penryn in Intels Lineup) kann diese Zahlen verbessern.

Ich denke, dies gilt hauptsächlich dort, wo die Caches groß sind - dies gilt nicht für alle Prozessortypen (obwohl die Leitungsverzögerung erheblich ist).