Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Capacity-Miss (Cache)
Hallo,
Kann mir jemand ein Beispiel für einen Capacity-Miss geben.
Auf Blatt 4 - Aufgabe 3 kam leider keiner vor.
Kommt der nur bei einer bestimmten Organisationsform vor oder bei allen?
Danke.
Hi
(ohne Gewähr, aber ich bin mir ziemlich sicher da es in der Fragestunde so erklärt wurde)
Angenommen du hast einen Vollassoziativen Cache mit 10 Blöcken, die alle befüllt sind.
Dann wird eine Adresse angefordert, die nicht im Cache vorliegt. Aufgrund der eingesetzten Verdrängungsstrategie wird sagen wir einfach mal der 5. Block verdrängt und mit den neuen Daten befüllt. In der nächsten Anweisung will die CPU dann auf das zugreifen, was vorher im 5. Block war, aber verdängt wurde. Dann ist das ein Capacity Miss.
So wie ich es verstanden habe:
Beim direkt abbildenden Cache kann kein Capacity Miss auftreten, sondern nur Conflict.
Beim VA Cache nur Capacity kein Conflict.
Compulsory natürlich immer bei beiden.
(n-fach kann glaub ich beides auftreten, aber ich kann mir grad kein Beispiel für Conflict zusammenreimen)
Gruß
Da n-fach assoziativ in der Übung dran kam gibts dort nur Conflict Miss.
Wie siehts bei direktabbildend aus? Ich vermute nur Conflict, weil es ja eh keine Kapazitäten (<>1) gibt.
Meiner Meinung nach geht beides. Nur weil die Kapazität == 1 ist, heißt das ja nicht, dass die Kapazität nicht zu klein sein kann. Es tritt halt quasi bei jedem Zugriff ein Capacity Miss auf.
Folgendes Beispiel sollte ein Conflict-Fall sein:
Betrachten wir einen Cache mit 2 Mengen und jeweils 2 Blöcken.
Ein Block soll jetzt in Menge 1 geladen werden, diese Menge sei aber bereits voll.
Dann handelt es sich um einen Capacity-Miss, wenn der Block auch hätte in Menge 2 geladen werden können, sodass der Block, der vorher in Menge 1 war, dringeblieben wäre und so bei einem weiteren Zugriff nicht hätte erneut geladen werden müssen.
Warum muss man sich das Leben unnötig schwer machen?
Capacity === Alle Blöcke wurden geprüft, ob noch was frei ist. Dem war nicht so, also wurde ein Block rausgeworfen, auf den nun aber wieder zugegriffen wird.
Da bei n-fach und direktabbildenden Caches jeweils nur eine Untermenge abgesucht wird (also die Menge bzw. nur ein best. Block), gibt’s auch keinen Capacity.
Conflict also immer dann, wenn nur eine Block, bzw. einige wenige innerhalb einer Menge in Frage kommen. Ob in anderen Mengen hier noch was frei ist, wird nicht geprüft, ergo egal. Also gibt’s auch keine Verdrängung weil der gesamte Cache voll war sondern weil kein Platz in den wenigen in Frage kommenden Blöcken war und der Eintrag deshalb verdrängt wurde.
Miss-Arten sind in der Theorie interessant. In der Praxis sind die wenigsten Caches VA, also wird so gut wie immer ein Konflikt zur Verdrängung führen.