Geheugenhiërarchie en prestaties
Wanneer een rij van een tweedimensionale array 4096 byte (een macht van 2) groot is, kunnen er bij het langs de kolom doorlopen van elementen veel misses optreden, ook als de cache voldoende capaciteit heeft. Welke maatregel is daartegen effectief?
- AAan het einde van elke rij opvulling toevoegen, zodat de rijgrootte afwijkt van een macht van 2
- BHet type van de array wijzigen in een ander type van dezelfde grootte
- CDe hele array opnieuw plaatsen op een grote adresgrens die een macht van 2 is
Antwoord en toelichting tonen
Antwoord: A. Aan het einde van elke rij opvulling toevoegen, zodat de rijgrootte afwijkt van een macht van 2
Bij rijen van precies 4096 byte liggen de adressen van langs de kolom doorlopen elementen steeds een veelvoud van 4096 uit elkaar, hebben dezelfde indexbits en concentreren zich in dezelfde set. Als meer rijen worden doorlopen dan de associativiteit toelaat, treden conflictmisses op waarbij elementen elkaar verdringen, ook bij ruime capaciteit. Met opvulling (padding) van ongeveer één regel per rij verschuift de bijbehorende set per element en wordt de belasting gespreid. Uitlijnen op een adres dat een macht van 2 is verandert het probleem niet, en een type van dezelfde grootte heeft geen effect.