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];
- A12,5%
- B6,25%
- 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.