15 Jahre TecChannel - der beliebteste Artikel 1999

So funktioniert ein Prozessor

Cache-Grundlagen

Zur Steigerung der Arbeitsleistung sitzt in der CPU zwischen den extrem schnellen Funktionseinheiten und dem vergleichsweise sehr langsamen Arbeitsspeicher der L1-Cache. Je nach Prozessor handelt es sich um einen zweigeteilten Cache (Split Cache) oder um einen einheitlichen Speicher (Unified Cache) für Befehle und Daten. Bei der Betrachtung der Funktionsweise spielt das keine Rolle.

Aus Platzgründen kann der L1-Cache in der CPU nicht besonders groß sein. Er bewegt sich in der Regel in Größenordnungen von 16 bis 64 KByte. Die Kunst besteht also darin, den schnellen kleinen Speicher so mit dem langsamen großen Arbeitsspeicher zu kombinieren, dass sich eine möglichst schnelle Gesamtlösung ergibt. Das Grundprinzip: Im Cache müssen die am häufigsten benötigten Informationen enthalten sein, damit möglichst wenige Zugriffe auf den langsamen Arbeitsspeicher erforderlich sind. Der Cache wird deshalb in Zeilen (Cache Lines) oder Sets eingeteilt. Erfolgt ein Lesezugriff auf einen Bereich im Arbeitsspeicher, dann füllt die CPU mittels schneller Burst-Zyklen eine komplette Cache-Zeile mit Informationen aus diesem Speicherblock auf. Die Wahrscheinlichkeit ist hoch, dass im Zuge des weiteren Programmflusses wiederholt auf diesen Speicherbereich zugegriffen werden muss.

Um den Set-Zeilen bestimmte Bereiche im Arbeitsspeicher zuordnen zu können, bedarf es eines Cache-Verzeichnisses. Jeder Eintrag im Cache besteht deshalb aus einem Valid-Bit (V-Bit), Tag- und Data-Feld. Das Bild "Cache Interna" zeigt den prinzipiellen Aufbau eines Caches.

Unsere tecChannel-CPU mit 64 KByte L1-Cache in 1024 Sets zu 64 Byte benötigt die sechs unteren Adressbits, um die 64 Bytes (2^6 = 64, A0 bis A5) eines Sets unterscheiden zu können. Für die 1024 Set-Zeilen muss sie 2^10 Adressbits (A6 bis A18) auswerten. Da die Set-Anzahl und die Cache-Line-Größe nicht verändert werden, muss sich der Cache diese beiden Teile der Adresse nicht merken. Es genügt, wenn sie während eines Zugriffs kurz anliegen. Allerdings benötigt er die höherwertigen Adressbits A19 bis A31 (das Tag), um festzustellen, welcher Block im Arbeitsspeicher gemeint ist. Dieses Tag muss er also unbedingt zusätzlich für jede Cache-Zeile speichern. Bild 6 zeigt die Auswertung einer 32-Bit-Adresse nach diesem Prinzip.

Als einfache Analogie betrachten wir einen Briefträger bei der Arbeit: Er trägt in einer Stadt (Arbeitsspeicher) die Post (Daten) aus. Dafür sortiert er die Post in seiner Tasche nach Straßen (Tag). In einer Straße holt er sich die hierfür bestimmte Post heraus und verteilt sie an die Häuser (Set-Zeile). Um in Mehrfamilienhäusern auch den richtigen Briefkasten zu erwischen, benötigt er noch den Familiennamen (Byte-Nummer).