Cache-Speicher sorgen dafür, dass schnelle Prozessoren nicht lange auf Daten warten müssen

Cache-Optimierung in eingebetteten Systemen

29. Juli 2009, 9:38 Uhr | Robert Oshana
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 4

Doppelte Pufferung

Bei einer typischen Anwendung in der Signalverarbeitung werden die Daten von einem Peripheriegerät gelesen, verarbeitet und dann über ein anderes Peripheriegerät ausgegeben. Während die CPU Daten verarbeitet und auf den Puffersatz zugreift (z.B. InBuffA und OutBuffA), schreiben und lesen die Peripheriegeräte unabhängig davon Daten und verwenden hierzu einen anderen Puffersatz. Damit findet die DMA-Datenübertragung parallel zur CPU-Verarbeitung statt (Bild 6).

Wurde InBuffA durch das Peripheriegerät gefüllt, sehen die weiteren Schritte folgendermaßen aus:

  • Eine Übertragung wird gestartet, um InBuffB zu füllen.
  • Die CPU verarbeitet Daten in In-BuffA. Die Zeilen von InBuffA werden in den L1D geschrieben. Die Daten werden durch die CPU verarbeitet und über den Schreibpuffer (L1D ist Lesevorgängen zugeordnet) in Out-BuffA geschrieben.
  • Anschließend werden die Puffer getauscht, so dass die CPU InBuffB liest und OutBuffB beschreibt. InBuffB wird in L1D zwischengespeichert.
  • Gleichzeitig füllt das Peripheriegerät InBuffA mit neuen Daten. Der Controller des L2-Cache übernimmt mithilfe der SNOOP-INVALIDATEBefehle automatisch die Aufgabe, die entsprechenden Zeilen in L1D auf „Ungültig“ zu setzen, so dass die CPU die Zeile im L1 mit den neuen Daten aus dem L2 beschreibt und nicht die zwischengespeicherte Zeile mit den alten Daten liest.
  • Außerdem liest das andere Peripheriegerät OutBuffA. Da dieser Puffer jedoch nicht im L1D zwischengespeichert ist, sind hier keine SNOOP-Befehle notwendig.

81es0406_tm.jpg
Bild 6. DMA-Doppelpufferung bei kohärentem Speicher. Wenn die CPU die verarbeiteten Daten zurückschreibt, wird der L1-Datencache übergangen.

Wenn bei demselben Pufferungsschema weitere Puffer im externen Speicher eingerichtet werden (Bild 7), sorgt der Cache-Controller nicht automatisch für Kohärenz, d.h., der Programmierer muss die Kohärenz manuell sicherstellen.

Befinden sich bei demselben Pufferungsszenario (Bild 6) die Puffer im externen Speicher, ist ebenfalls der Programmierer verantwortlich dafür, die Kohärenz manuell sicherzustellen, da dies nicht automatisch durch den Cache-Controller geschieht. Auch hier liest die CPU Daten aus einem Peripheriegerät ein, verarbeitet die Daten und schreibt diese dann mittels DMA auf ein anderes Peripheriegerät. Zusätzlich werden die Daten über den L2-Cache geleitet.

Wenn die Übertragungen bereits stattfanden, dann sind sowohl InBuff als auch OutBuff im L2-Cache und außerdem InBuff im L1D zwischengespeichert: Die CPU hat die Nutzung von InBuffB abgeschlossen, OutBuffB gefüllt und beginnt demnächst mit der Verarbeitung der A-Puffer. Vor der Verarbeitung übergibt die Funktion, mit der die neuen Daten in den Puffer InBuffB gelangen, die von der CPU in OutBuffB geschriebenen Daten an das Peripheriegerät.

81es0407_tm.jpg
Bild 7. DMA-Doppelpufferung bei inkohärentem Speicher. Der externe Speicher wird nicht durch den Cache-Controller überwacht. Deshalb muss der Programmierer die Kohärenz der Daten zwischen internen und externen Pufferspeichern sicherstellen.

Um zu gewährleisten, dass die Kohärenz zwischen dem externen Speicher (Bild 7) und dem L2-Cache sowie zwischen dem L2-Cache und L1D aufrechterhalten bleibt, muss derselbe Prozess wie im vorigen Beispiel ausgeführt werden. Außerdem müssen die Zeilen im L2-Cache und in L1D, die auf die Eingabepuffer im externen Speicher abgebildet werden, vor dem Beginn bzw. nach Abschluss der Übertragung auf „Ungültig“ gesetzt werden.

Die Chip Support Library (CSL) der C64x-DSPs stellt hierfür eine Reihe von Routinen bereit, mit deren Hilfe der Programmierer die Cache-Operationen initiieren kann. In diesem Fall sollte vor Beginn der Übertragung „CACHE_control“ (CACHE_L2, CACHE_INV, InBuffB, BUFSIZE) verwendet werden. Dafür müssen die Anfangsadresse des Puffers im externen Speicher und die Anzahl von Bytes angegeben werden.


  1. Cache-Optimierung in eingebetteten Systemen
  2. Cache-Optimierung in eingebetteten Systemen
  3. Cache-Optimierung in eingebetteten Systemen
  4. Gültigkeitsprüfung der zwischengespeicherten Daten
  5. Doppelte Pufferung
  6. Cache-Optimierung in eingebetteten Systemen

Jetzt kostenfreie Newsletter bestellen!