Geheugenhiërarchie en prestaties

In bovenstaande lus is een int 4 byte, een cacheregel 64 byte, staat de array niet in de cache en begint hij op een regelgrens. Wat is, zonder prefetching, de missratio bij het lezen van de array?

int a[1024];
for (i = 0; i < 1024; i++)
    sum += a[i];
  1. A12,5%
  2. B6,25%
  3. C100%
Antwoord en toelichting tonen

Antwoord: B. 6,25%

In een regel van 64 byte passen 64 ÷ 4 = 16 ints. Bij sequentieel lezen treedt bij het eerste element van elke regel één miss op en zijn de overige 15 hits, dus de missratio is 1 ÷ 16 = 6,25%. Bij 1024 elementen zijn dat 1024 ÷ 16 = 64 misses. 12,5% is de waarde als er ten onrechte slechts 8 in een regel zouden passen. 100% treedt op bij een toegangspatroon dat per regel slechts één element gebruikt, zoals om de 16 elementen (om de 64 byte) lezen.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Geheugenhiërarchie en prestaties

  1. Wat is het belangrijkste doel van loop blocking (tiling), zoals gebruikt bij matrixvermenigvuldiging?
  2. Waarom wordt een bewerking die alleen de x-coördinaten optelt vaak sneller wanneer een array van structuren wordt omgeschreven tot een structuur van arrays (elke component in een eigen array)?
  3. Wat is het belangrijkste voordeel van een gesplitste L1-cache met aparte caches voor instructies (I-cache) en data (D-cache)?
  4. In een systeem met paginagrootte 4 KB en regelgrootte 64 byte wordt een L1-cache met virtuele index en fysieke tag (VIPT) zo opgebouwd dat index en offset alleen uit bits binnen de pagina bestaan. Wat is de maximale capaciteit van de cache bij 8-weg set-associativiteit?
  5. Wat is de belangrijkste reden dat VIPT (virtuele index, fysieke tag) vaak wordt gebruikt voor de L1-cache?

Vergelijkingen bij dit onderwerp