wake-up-neo.com

Was ist der Unterschied zwischen Konfliktfehlern und Kapazitätsfehlern?

Ein Kapazitätsfehler tritt auf, weil Blöcke aus dem Cache gelöscht werden, da der Cache nicht alle für die Programmausführung erforderlichen Blöcke enthalten kann (der Programmarbeitssatz ist viel größer als die Cache-Kapazität).

Konfliktfehler treten im Fall von Blockplatzierungsstrategien mit Satzzuordnung oder direkter Zuordnung auf. Konfliktfehler treten auf, wenn mehrere Blöcke demselben Satz oder Blockrahmen zugeordnet sind. auch Kollisions- oder Interferenzfehler genannt.

Sind sie eigentlich sehr eng miteinander verwandt?

Zum Beispiel, wenn alle Cache-Zeilen gefüllt sind und wir eine Leseanforderung für Speicher B haben, für die wir Speicher A räumen müssen.

Sollte dies als Kapazitätsverlust angesehen werden, da nicht genügend Speicherplatz vorhanden ist? Und später, wenn wir auf Speicher A zugreifen möchten, und da er zuvor geräumt wurde, wird er als Konfliktfehler betrachtet.

Verstehe ich das richtig? Vielen Dank

25
xiaodong

Hier besteht der wichtige Unterschied zwischen Cache-Fehlern, die durch die Größe Ihres Datensatzes verursacht werden, und Cache-Fehlern, die durch die Art und Weise verursacht werden, wie Ihr Cache und die Datenausrichtung organisiert sind.

Nehmen wir an, Sie haben einen 32-KB-Cache mit direkter Zuordnung und betrachten die folgenden 2 Fälle:

  1. Sie iterieren wiederholt über ein 128-KB-Array. Es gibt keine Möglichkeit, dass die Daten in diesen Cache passen, daher handelt es sich bei allen Fehlern um kapazitive Fehler (mit Ausnahme des ersten Zugriffs auf jede Zeile, bei dem es sich um einen obligatorischen Fehler handelt, und der auch dann bestehen bleibt, wenn Sie Ihren Cache unendlich vergrößern könnten).

  2. Sie haben zwei kleine 8-KB-Arrays, die jedoch beide ausgerichtet sind und denselben Sätzen zugeordnet sind. Dies bedeutet, dass sie zwar theoretisch in den Cache passen könnten (wenn Sie Ihre Ausrichtung korrigieren), jedoch nicht die gesamte Cache-Größe ausnutzen und stattdessen um die gleiche Gruppe von Sätzen konkurrieren und sich gegenseitig schlagen. Hierbei handelt es sich um Konfliktfehler, da die Daten zwar passen könnten, aber dennoch organisationsbedingt kollidieren. Dasselbe Problem kann auch bei assoziativen Caches auftreten, wenn auch seltener (sagen wir, der Cache ist bidirektional, aber Sie haben 4 ausgerichtete Datensätze ...).

Die beiden Typen sind in der Tat miteinander verwandt. Man könnte also sagen, dass man bei einem hohen Maß an Assoziativität, Schrägstellung, korrekter Datenausrichtung und anderen Techniken die Konflikte reduzieren könnte, bis zumeist echte Kapazitätsausfälle auftreten, die unvermeidbar sind.

43
Leeor

Meine Lieblingsdefinition für Konfliktfehler aus Reduzierung von Pflicht- und Kapazitätsfehlern von Norman P. Jouppi:

Konfliktfehler sind Fehler, die nicht auftreten würden, wenn der Cache vollständig mit dem Ersetzen der LRU assoziiert wäre.

Schauen wir uns ein Beispiel an. Wir haben einen direkt zugeordneten Cache der Größe 4. Die Zugriffssequenzen sind

0(compulsory miss), 1(compulsory miss), 2(compulsory miss), 3(compulsory miss), 4(compulsory miss), 1(hit), 2(hit), 3(hit), 0(capacity miss), 4(capacity miss), 0(conflict miss)

Die vorletzte 0 ist ein Kapazitätsfehler, denn selbst wenn der Cache vollständig mit dem LRU-Cache assoziiert wäre, würde er immer noch einen Fehler verursachen, da auf 4,1,2,3 vor der letzten 0 zugegriffen wird. Die letzte 0 ist jedoch ein Konfliktfehler, weil In einem vollständig assoziativen Cache würden die letzten 4 anstelle von 0 1 im Cache ersetzen.

12

Obligatorischer Fehlschlag: Wenn ein Block des Hauptspeichers versucht, eine neue leere Cache-Zeile zu belegen, und der allererste Zugriff auf einen Speicherblock, der in den Cache gebracht werden muss, als obligatorischer Fehlschlag bezeichnet wird.

Conflict miss: Wenn sich noch leere Zeilen im Cache befinden, besteht ein Konflikt zwischen dem Hauptspeicherblock und der bereits gefüllten Cache-Zeile. Auch wenn ein leerer Platz verfügbar ist, versucht der Block, ihn bereits zu belegen ausgefüllte Zeile. Es heißt Konflikt miss.

Capacity miss: Ein Miss trat auf, wenn alle Cache-Zeilen gefüllt waren.

konfliktfehler treten nur im direkt zugeordneten Cache und im satzassoziativen Cache auf. Weil bei der assoziativen Zuordnung kein Block des Hauptspeichers versucht, eine bereits gefüllte Zeile zu belegen.

4
flora