Új hozzászólás Aktív témák

  • Reverend

    tag

    válasz lenox #20 üzenetére

    Bizony! Csak valószínű akik most felfedezték újra a DOD-t, azok még nem éltek 1995-ben, amikor sz@ptunk a cache associativity-vel [link].

    Csak hogy a fiatalok is értsék: ha egy cache 2 way assoc. és nem mellesleg (pl.) 4096 byte széles (pl. 8k L1 cache), azt jelenti, hogy a memóriában minden egész 4096 byte-os címről származó adatból 2-őt tud tárolni. Azaz ha beolvasol egy adatot az egyszerűség kedvéért 4096-ról, majd 8192-ről, ez még a cache-ben lesz. De ha beolvasol egyet 12288-ról, kiüti a korábbi adatot. Ha ezek után írsz egy kódot, mely két nagy tömböt összead egy harmadikba, és történetesen a tömbök alignolva vannak 4096-ra (mert pl. a méretük ennek egész számú többszöröse, és egymás mögött vannak), akkor látható, hogy szépen folyamatosan cache missed lesz. De ha az eredmény tömböt eltolod a cache blokkméretével (cache line, valahol 16 - 128 byte között processzortól függően), akkor sosem lesz cache missed, egész pontosan csak blokkhatárkor. A kód többszörösére gyorsul. Tipikus DOD probléma, illetve annak egy tovább bonyolított verziója.

    Ezzel a problémával egy 486-os gépen küzdöttem 1995 körül. Ha jól emlékszem.

Új hozzászólás Aktív témák