Computerhardware: Prozessor: Cache
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Der Cache-Speicher der CPU
[Bearbeiten] Was ist das – ein Cache?
Einen großen, langsamen Speicher zu beschleunigen, indem man häufig benötigte Daten in einem kleinen, schnelleren Speicher für schnellen Zugriff bereithält, hat sich als sehr effektiv herausgestellt. Dieser Beschleunigungsspeicher wird als Cache-Speicher (sprich: Kesch oder Käsch) bezeichnet. Im Computer gibt es Cache-Speicher an mehreren Stellen:
- Ein Festplattencache ist Bestandteil der Festplattenelektronik. Wenn ein Teil einer Spur von der CPU angefordert wird, speichert der Cache den Rest der Spur für eventuelle spätere Anfragen.
- CD- und DVD-Brenner benutzen einen Cache. Dadurch reißt der Datenstrom nicht ab, wenn es zu kleinen Verzögerungen beim Lesen der zu brennenden Daten kommt.
- Im Inneren der CPU gibt es einen Prozessor-Cache, um den es im Weiteren geht.
[Bearbeiten] Der Prozessor-Cache
In den ersten CPUs gab es zwei zeitlich getrennte Phasen:
- Die CPU fordert eine Befehl und die zugehörigen Daten an und wartet, bis der Speicher die bestellten Bytes liefert.
- Die CPU führt den Befehl aus. Währenddessen wartet der Speicher auf den nächsten „Auftrag“, denn erst nach Ausführung des Befehls steht fest, welcher Befehl als Nächster auszuführen ist.
Dabei geht viel Zeit verloren, weil CPU und Speicher immer nur abwechselnd zu tun haben. Dieser Geschwindigkeitsverlust lässt sich durch ein „Prefetch“ genanntes Verfahren der „Vorratshaltung“ vermindern: Eine Baugruppe der CPU holt die nächsten Befehle im Voraus und hält sie in einem Zwischenspeicher, dem Cache, solange bereit, bis sie von der CPU gebraucht werden. Seit dem ersten Pentium laufen das Heranschaffen der Daten und deren Verarbeitung weitgehend gleichzeitig ab.
Der Prozessor-Cache ist ein kleiner, schneller Speicher, der Kopien von den am häufigsten benötigten Daten des Arbeitsspeichers enthält. Wenn der Prozessor Daten aus dem Arbeitsspeicher anfordert, prüft die Elektronik blitzschnell, ob von den benötigten Daten vielleicht schon eine Kopie im Cache-RAM existiert. Wenn ja, erhält die CPU die Daten noch im gleichen Takt. Wenn nein, wird die Anforderung an den Hauptspeicher weitergegeben. Der Prozessor muss warten, d.h. einige Wartetakte einlegen.
[Bearbeiten] Die Strategie der Cache-Nutzung
Die Auswahl, welche Daten im Cache gespeichert werden, erfolgt vollautomatisch, die Programmierer haben darauf keinen Einfluss. Diese Entscheidungen muss eine Elektronik treffen, ausgehend von folgenden Kriterien:
- Welche Daten wurden in den letzten Mikrosekunden am häufigsten benutzt?
- Welche Daten werden voraussichtlich demnächst benötigt?
- Welche Daten werden voraussichtlich nicht mehr benötigt und können entfernt werden, um Platz zu schaffen?
[Bearbeiten] Sprungvorhersage
„Am häufigsten benutzt“, „voraussichtlich benötigt“ und „voraussichtlich nicht mehr benötigt“ – die Zukunft vorauszusagen, war noch nie einfach. Wie kann die Elektronik voraussehen, was zukünftig benötigt werden wird? Die Treffsicherheit dieser Voraussage ist für die Geschwindigkeit der CPU entscheidend.
Jedes Programm enthält eine große Anzahl Verzweigungsbefehle. So nennt man die Befehle, bei denen die CPU in Abhängigkeit von einem Zwischenergebnis entscheiden muss, wie es weitergeht. Beispiel bei der Musikausgabe: Ist die nächste Note eine Achtel-, Viertel- oder ganze Note? Kommt noch eine weitere Note oder ist das Ende des Musikstückes erreicht? Die „Vorausschaueinheit“ der CPU kann das nicht ermitteln und stellte bei frühen Prozessoren die Arbeit ein, bis das Rechenwerk den Verzweigungsbefehl bearbeitet und über den weiteren Programmverlauf entschieden hat. Nun tritt allerdings eine Pause ein, weil die Vorausschaueinheit erst die Daten für die Weiterarbeit heranschaffen muss.
Seit Jahren basteln die Prozessorhersteller daran, wie die Elektronik die wahrscheinlichste Programmfortsetzung ermitteln kann (die „Branch Prediction“ = Sprungvorhersage). Hat die Elektronik gut „geraten“ und die richtigen Daten vorbereitet, kann das Rechenwerk zügig weiterarbeiten. „Falsch geraten“ bedeutet, dass die vorausschauend bereitgestellten Daten weggeworfen werden und das Rechenwerk warten muss.
Aktuelle CPUs haben zwei bis zwölf MB Cache. Obwohl der Hauptspeicher sehr viel größer ist, schafft es die Cache-Verwaltung mit ausgefeilten Algorithmen, beachtliche 80 % bis 90 % der vom Prozessor benötigten Daten rechtzeitig im Cache bereitzustellen.
[Bearbeiten] Vorausschauendes Lesen
Während das Rechenwerk der CPU einen Befehl ausführt, haben andere Baugruppen der CPU schon die Vorarbeit geleistet: Sie haben für etwa fünf bis 15 Befehle im Voraus analysiert, welche Daten für diese Befehle benötigt werden, um diese Daten frühzeitig heranzuschaffen. Dadurch kann das Rechenwerk meistens mit voller Geschwindigkeit arbeiten.
[Bearbeiten] 64-Bit-Verarbeitungsbreite
Die CPU kann jedes Byte des Arbeitsspeichers einzeln adressieren und fordert jedes Byte einzeln an. Die Bits im Speicher sind zu Gruppen von 64 Bit zusammengefasst. Die 8 Byte einer solchen Gruppe werden stets gleichzeitig gelesen oder geschrieben. Nehmen wir an, dass die CPU nur das dritte Byte dieser Gruppe benötigt. Die Byte 0 bis 7 werden gelesen, das Byte 3 zur CPU geschickt und die restlichen 7 nicht benötigten Byte verbleiben noch eine Weile im Cache-Speicher. Falls die CPU bald darauf Byte 4 benötigt, bekommt sie es aus dem Cache und die Bytes 0 bis 7 brauchen nicht erneut gelesen zu werden. Das ist vorteilhaft, denn es gibt viele Arten von Daten, die Byte für Byte benötigt werden: Texte, Musik und Videos werden nur selten „rückwärts“ oder sprungweise gelesen, angehört bzw. angesehen.
[Bearbeiten] Verzögert schreiben
Jedes von der CPU berechnete Ergebnis wird zunächst im Cache gespeichert. Weil das Ergebnis eines Rechenschrittes oft in einem der nachfolgenden Rechenschritte weiterverwendet wird, kann die CPU ohne Wartezeit darauf zugreifen. Zwar muss das Ergebnis irgendwann in den langsamen Arbeitsspeicher abtransportiert werden, aber das wird vorzugsweise dann erledigt, wenn es mal keine Leseanforderungen an den Arbeitsspeicher gibt.
[Bearbeiten] Wo befindet sich der Prozessorcache?
Der 386er war der erste Prozessor, der mit einem Cache arbeitete. Er bestand aus vier oder acht Einzelchips, die auf der Hauptplatine untergebracht waren.
Mit dem 486er gab es einen Fortschritt. Die Leiterzüge im CPU-Schaltkreis waren schmaler geworden, dadurch passten mehr Transistoren hinein. Der Cache fand direkt im Prozessorchip seinen Platz. Die kurzen Datenwege erhöhten die Geschwindigkeit stark.
Die fortschreitender Verkleinerung der Leiterzüge und Strukturen ermöglicht es, immer mehr Transistoren in der CPU unterzubringen. Ein Teil der zusätzlichen Transistoren wird verwendet, um den Cache zu Vergrößern. Es gibt aber für die Cache-Größe eine Obergrenze. Wird er zu groß, dauert das Suchen und Verwalten zu lange. Wenn es die Cache-Elektronik nicht mehr schafft, innerhalb eines CPU-Takts die benötigten Daten zu liefern, wird der Cache uneffektiv. Deshalb entschieden die Ingenieure, den Cache zweistufig zu organisieren. Dem kleinen, schnellen Level-1-Cache in der CPU wurde ein größerer, etwas langsamerer Level-2-Cache vorgeschaltet. Um die Datenwege kurz zu halten, wurde der L2-Cache zusammen mit dem Pentium II auf einer kleinen Leiterplatte ausgeliefert, die in einen „Slot1“ (Slot = Steckverbinder) auf der Hauptplatine gesteckt wurde.
Beim Pentium III konnten die Leiterzüge und alle Strukturen im CPU-Kern weiter verkleinert werden, es passten jetzt viel mehr Transistoren in das Gehäuse. Durch diese Miniaturisierung gelang es nun endlich, auch den L2-Cache im Inneren des Prozessors unterzubringen.
In einem Pentium 4 mit 2.800 MHz Taktfrequenz kann der Level-1-Cache 12 KByte groß sein, und der Level-2-Cache ist 256 KByte groß.
Die typische RAM-Ausstattung wird immer größer und die Anforderungen auch. Bei einer neueren Intel-CPU, dem „Pentium 4 Extreme Edition“, gibt es nun eine dritte Cache-Stufe: L1 = 8k oder 16k, L2 = 512k, L3 = 2.048k („k“ ist die Abkürzung von KByte).