Computerhardware: Prozessor: Cache
Der Cache-Speicher der CPU
[Bearbeiten]Der Cache-Speicher des Prozessors
[Bearbeiten]Was ist das - ein Cache?
[Bearbeiten]Wenn die CPU ein Byte aus dem RAM braucht, muss sie lange warten. Wenn die CPU das Byte fünf Mal braucht, muss sie fünf Mal warten. Als Abhilfe bekommt die CPU einen Cache und einen Cachecontroller. Das Wort „Cache“ wird mit Zwischenspeicher, Pufferspeicher, geheime Vorratskammer oder geheimes Lager übersetzt. „Geheim“ bedeutet in diesem Zusammenhang, dass von außen nicht sichtbar ist, was sich darin abspielt.
Bei jedem Lesezugriff der CPU auf den Arbeitsspeicher wird eine Kopie der gelesenen Daten im Cache gespeichert. Wenn die CPU ein Byte zum ersten Mal anfordert, ist es noch nicht im Cache-Speicher. Das nennt man einen „Cache-Miss“. Wird dieses Byte kurz nach der ersten Verwendung erneut angefordert, findet es der Cache-Controller im Cache. Einen solchen „Treffer“ nennt man „Cache-Hit“. Die CPU bekommt das Byte aus dem Cache und muss nicht auf den Arbeitsspeicher warten.
Der Speicherbus ist seit dem ersten Pentium 64 Bit breit. Der Arbeitsspeicher liest stets acht Byte, niemals ein einzelnes Byte. Entsprechend merkt sich auch der Cache acht benachbarte Byte als „Cache-Line“, sprich „kesch-lain“. Wenn die CPU ein benachbartes Byte anfordert, kann sie aus dem Cache bedient werden.
- 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. Auch beim Lesen hilft der Cache, vor allem bei transportablen Playern: wenn der Lesekopf wegen eines Schlagloches die Spur verloren hat, kommt die Musik übergangsweise aus dem Cache.
- 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:
- Die CPU beauftragt die Speichersteuerung, einen Befehl und die zugehörigen Daten aus dem Speicher zu holen, und wartet geduldig, bis der Speicher die bestellten Bytes liefert.
- Sind die Daten eingetroffen, führt die CPU den Befehl aus. Inzwischen wartet der Speicher, denn erst nach Ausführung des Befehls steht fest, welcher Befehl und welche Daten als nächste gebraucht werden.
- 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.
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 (ein „Cache-Hit“), erhält die CPU die Daten noch im selben Takt. Wenn nein (ein „Cache-Miss“), wird die Anforderung an den Arbeitsspeicher weitergegeben. Die CPU muss warten, d. h. einige Wartetakte einlegen, oder vorübergehend zu einer anderen Aufgabe wechseln (Hyper-Threading).
Die Strategie der Cache-Nutzung
[Bearbeiten]Irgendwann ist der Cache voll und es muss Platz für neue Daten frei gemacht werden. Der Cache-Controller muss eine Kombination der folgenden Kriterien benutzen, um Entscheidungen zu treffen:
- 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.
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.
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 2 bis 22 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.
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 das angeforderte Byte 3 sowie 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. Einer der leistungsfähigsten Prozessoren der „fünften Generation“ ist der „Core i7-5960X Extreme Edition“ von Intel, ein Achtkernprozessor mit 2,6 Milliarden Transistoren. Er hat pro Kern einen L1-Cache von 32 kB Daten + 32 kB Instruktionen und einen L2-Cache von 256 kB. Die 20 MByte L3-Cache werden von allen Kernen gemeinsam genutzt. („k“ ist die Abkürzung von KByte). Allerdings kostete dieser Prozessor (als er neu war) etwa 1100 Euro.
Der Smartphone-Prozessor Intel Atom Z2460 hat einen Level-1-Cache von 32 kB für Befehle und 24 kB für Daten sowie einen Level-2-Cache von 512 kB, ist also durchaus vergleichbar mit den Desktop-CPUs.
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 bis sechzehn datenhungrige Recheneinheiten, 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. Die Hälfte bis drei Viertel der Transistoren in modernen CPUs werden für den Cache-Speicher und die Vorausschau-Logik verwendet.