Computerhardware: Prozessor: Cache

Aus Wikibooks
Zur Navigation springen Zur Suche springen

Der Cache-Speicher der CPU[Bearbeiten]

Der Cache-Speicher des Prozessors[Bearbeiten]

Was ist das - ein Cache?[Bearbeiten]

Einen großen, langsamen Speicher zu beschleunigen, indem man die am häufigsten benötigten Daten in einem kleinen, schnelleren Speicher für schnellen Zugriff bereithält, hat sich als sehr effektiv herausgestellt. Dieser Beschleunigungsspeicher wird als Cache-Speicher 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 Nachschub der zu brennenden Daten kommt.
  • Im Inneren der CPU gibt es einen Prozessor-Cache, um den es im Weiteren geht.

Warum braucht die CPU einen Cache?[Bearbeiten]

In den ersten CPUs gab es drei zeitlich getrennte Phasen:

  1. Die CPU fordert einen Befehl und die zugehörigen Daten an und wartet, bis der Speicher die bestellten Bytes liefert.
  2. 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.
  3. Das Ergebnis der Berechnung wird in den Speicher zurückgeschrieben.

Dabei geht viel Zeit verloren, weil CPU und Speicher immer nur abwechselnd arbeiten. 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.

Pentium Pro, links: Steuer- und Recheneinheiten, rechts: Cache Level II, erkennbar an der regelmäßigen Struktur

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 selben Takt. Wenn nein, wird die Anforderung an den Hauptspeicher weitergegeben. Der Prozessor muss warten, d.h. einige Wartetakte einlegen, oder zu einer anderen Aufgabe wechseln.

Die Strategie der Cache-Nutzung[Bearbeiten]

Welche Daten im Cache gespeichert werden und wie lange sie im Cache verbleiben, wird von der Vorschau-Elektronik vollautomatisch entschieden. Die folgenden Kriterien werden dabei berücksichtigt:

  • Welche Daten sind in den letzten Mikrosekunden am häufigsten benutzt worden,
  • Welche Daten werden voraussichtlich demnächst benötigt und
  • Welche Daten werden voraussichtlich nicht mehr benötigt und können deshalb entfernt werden, um Platz zu schaffen.

Sprungvorhersage[Bearbeiten]

Das Problem ist: Woher „wissen“ die elektronischen Schaltungen, welche Daten demnächst „voraussichtlich benötigt“ werden?

„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 ­„Vorausschau-einheit“ 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. Dadurch tritt allerdings eine Pause ein, weil die Vorausschaueinheit erst die Daten für die Weiterarbeit heranschaffen muss.

Seit Jahren arbeiten die Prozessorhersteller daran, wie die Elektronik die wahrscheinlichste ­Programmfortsetzung immer besser vorhersagen kann (die „Branch Prediction“ = ­Sprung-vorhersage). Hat die Elektronik gut „geraten“ und die richtigen Daten vorbereitet, kann das Rechenwerk zügig weiterarbeiten. „Falsch spekuliert“ bedeutet, dass die Kopien der vorausschauend bereitgestellten Daten verworfen werden und das Rechenwerk warten muss.

Aktuelle CPUs haben zwei bis zwölf MB Cache. Obwohl der Hauptspeicher etwa tausend mal 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.

Vorausschauendes Lesen[Bearbeiten]

Bevor das Rechenwerk der CPU einen Befehl ausführen kann, haben andere Baugruppen der CPU schon die Vorarbeit geleistet: Sie haben für etwa 5 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.

Verzögertes Schreiben[Bearbeiten]

Jedes von der CPU berechnete Ergebnis wird zunächst im Cache gespeichert. Wenn das Ergebnis eines Rechenschrittes 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.

64-Bit-Verarbeitungsbreite[Bearbeiten]

Die CPU kann jedes Byte des Arbeitsspeichers einzeln adressieren. Ob sie die Bytes einzeln oder in Gruppen anfordert, hängt vom ausgeführten Programm ab. Bei genauen mathematischen Berechnungen sind die Zahlen meist vier Byte groß. 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 Bytes 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.

Wo befindet sich der Prozessorcache?[Bearbeiten]

Der 386er war der erste Prozessor, der mit einem Cache arbeitete. Der Cache bestand aus vier oder acht einzelnen Speicherchips, 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 in die CPU. Der Cache fand direkt im Prozessorchip seinen Platz. Die kurzen Datenwege erhöhten die Geschwindigkeit stark.

Die Leiterzüge und Strukturen wurden immer weiter verkleinert. Das 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 sinnvolle 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 ineffizient. 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 hinzugefügt. 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,8 GHz 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. Neuere CPUs haben einen dreistufigen Cache, z. B. hat der „Pentium 4 Extreme Edition“ L1 = 8k oder 16k, L2 = 512k, L3 = 2 048k („k“ ist die Abkürzung von KByte).

Durch den Cache hat die Taktfrequenz aufgehört, alleiniger Maßstab für die Rechenleistung einer CPU zu sein. Die Größe des Cache und die „Treffsicherheit“ der Elektronik bei der Vorhersage der demnächst benötigten Daten sind ebenfalls wichtig. Was nützt eine hohe Taktfrequenz, wenn die CPU Pausen einlegen muss, um auf Daten zu warten? Während die CPU mit 2 bis 3 GHz arbeitet, bringt es der schnellste DDR3-Speicher (DDR3-1600) auf 12 GByte/s. Auf den ersten Blick scheint das ausreichend. Allerdings sind die 12 GByte/s ein theoretischer Wert, der nur dann erreicht werden könnte, wenn die angeforderten Daten im Speicher aufeinanderfolgend abgelegt sind. Tatsächlich sind die meisten Daten eher zufällig im RAM verteilt, also dauert der Zugriff viel länger. Außerdem werkeln in heutigen CPUs zwei Recheneinheiten, die nach Daten hungern, und jede braucht mehrere Byte pro Takt.

Trotz aller Raffinessen kann kein heutiger Speicher den Datenhunger moderner CPUs befriedigen. So heißt es für die CPU immer wieder: Warten, warten, warten. Die CPU-Entwickler ­kompensieren das so gut sie können. Mehr als die Hälfte der Transistoren in modernen CPUs wird für den Cache-Speicher und die Vorausschau-Logik verwendet.