Speicherhierarchie und Leistung
Ist eine Zeile eines zweidimensionalen Arrays genau 4096 Byte (Zweierpotenz) groß, kann es beim Durchlaufen von Elementen in Spaltenrichtung auch bei ausreichender Cache-Kapazität zu vielen Misses kommen. Welche Gegenmaßnahme ist wirksam?
- AAm Ende jeder Zeile Füllbytes hinzufügen, sodass die Zeilengröße keine Zweierpotenz mehr ist
- BDen Typ des Arrays in einen anderen Typ gleicher Größe ändern
- CDas gesamte Array neu an einer großen Zweierpotenz-Adressgrenze ausrichten
Antwort und Erläuterung anzeigen
Antwort: A. Am Ende jeder Zeile Füllbytes hinzufügen, sodass die Zeilengröße keine Zweierpotenz mehr ist
Bei genau 4096 Byte pro Zeile liegen die in Spaltenrichtung durchlaufenen Elemente jeweils um ein Vielfaches von 4096 auseinander, haben dieselben Index-Bits und konzentrieren sich im selben Satz. Werden mehr Zeilen durchlaufen als die Assoziativität, kommt es auch bei ausreichender Kapazität zu Konflikt-Misses durch gegenseitiges Verdrängen. Werden jeder Zeile Füllbytes (Padding) von etwa einer Zeile hinzugefügt, verschiebt sich der zugehörige Satz von Element zu Element und verteilt sich. Auch das Ausrichten an einer Zweierpotenz-Adresse ändert das Problem nicht, und der Wechsel zu einem Typ gleicher Größe bringt nichts.