TI2/Rechnerarchitektur-Tutorium, 09.02.2017

Vorlesung – Caches

Warum Caching

  • Arbeitsspeicher ist (im Vergleich zum Prozessor) langsam

  • Ohne Cache müsste die CPU ständig auf den Arbeitsspeicher warten

  • Cache enthält einen Teil der Daten aus dem Arbeitsspeicher – und zwar den, auf dem die CPU aktuell arbeitet

  • zeitliche und örtliche Lokalität

Grundlegende Funktionsweise

  • Bei Lesezugriff wird geprüft ob Datum im Cache

  • JA: Datum kann direkt aus Cache zurückgegeben werden

  • NEIN: Datum muss (langsam) aus Arbeitsspeicher gelesen werden und wird zusätzlich in Cache eingefügt

  • Hit-Rate = Treffer / Zugriffe

Schreibzugriff auf Cache

  • Wenn Datum geschrieben wird, dass nicht im Cache ist: in Cache und Arbeitsspeicher schreiben

  • Ist das Datum jedoch schon im Cache gibt es mehrere Verfahren

    • Write through: immer gleichzeitig in Arbeitsspeicher und Cache schreiben

    • Buffered write through: immer direkt in Cache; erst nachdem Puffer voll ist in Arbeitsspeicher

    • Write Back: nur in Cache + Kennzeichnung – wird das Datum dann aus Cache verdrängt Schreiben in Arbeitsspeicher

  • Bei allen Verfahren: Konsistenz vs. Geschwindigkeit

Aufbau

  • Folie 5.46

  • Nicht einzelne Bytes werden gecached, sondern ganze Blöcke/Cache-Lines (z.B. 64 Byte)

  • Jeder Block wird in einem Blockrahmen (die Speicher“zelle”) gespeichert

  • Daher wird nicht ganze Adresse verglichen sondern immer nur die Basisadresse

    • Brauchen schnellen Adress-Vergleich, sonst kein Geschwindigkeitsvorteil
  • Der Rest wählt das richtige Byte aus der Cache-Line aus

  • Mehrere Blockrahmen können zu Sets zusammengefasst werden

Assoziativität

  • Voll-Assoziativ: Jeder Block kann überall im Cache abgelegt werden (5.52f)
    • 1 Set; Assoziativität = Blockrahmenanzahl
  • Direct-Mapped: Jeder Block kann nur an einer Stelle im Cache abgelegt werden (5.55ff)
    • Assoziativität = 1; Anzahl Sets = Blockrahmenanzahl
  • n-Way-Set-Associative: Jeder Block kann an n Stellen im Cache abgelegt werden (5.60ff)
    • Assoziativität = n; Anzahl Sets = Blockrahmenanzahl / n

Verdrängung

  • Wenn neues Datum in vollen Cache rein soll, dann muss eine Datum rausgeworfen werden, aber welches?

    • Least Recently Used
    • FIFO
  • Nur nötig bei Voll-Assoziativ oder n-Way-Set-Associative