CPU Cache kezelés

### CPU Cache áttekintés

A teljesítmény növelése érdekében a 68k processzor-család képes a memóriahozzáférést gyorsítótárazni.
A cache mindig logikai címekhez van rendelve, beleértve a hozzáférés funkciókódját. Ez azt jelenti, hogy a User Mode és a Supervisor Mode különböző cache bejegyzéseket fognak generálni(a részletekért lásd a Motorola dokumentációját).

Itt következik egy áttekintés a 68k processzorok cache-kezeléséről:

- 68000 nincs
- 68010
  - Instruction Prefetch
    két word prefetch, egy word dekodoló regiszter
  - Loop Mode
    akkor történeik, ha egy egy word hosszú utasítást egy DBcc követ, a ciklus végéig nem történik több utasítás fetch a ciklus végéig.
- 68020
  - Instruction Prefetch
    egy hosszú word
  - Instruction Cache
    16 vonal á 16 byte = 256 byte
    kapcsolható be vagy álítható meg a CACR segítségével
- 68030
  - Instruction Prefetch
    egy hosszú word
  - Instruction Cache
    16 vonal á 16 byte = 256 byte
    kapcsolható be vagy álítható meg a CACR segítségével
  - Data Cache
    16 vonal á 16 byte = 256 byte
    kapcsolható be vagy álítható meg a CACR segítségével
    WriteThrough mindig
    választható Write Allocation mód
- 68040
  - Instruction Prefetch
    egy hosszú word
  - Instruction Cache
    256 vonal á 16 byte = 4096 byte
    bekapcsolható a CACR segítségével
  - Data Cache
    256 vonal á 16 byte = 4096 byte
    bekapcsolható a CACR segítségével
    választható CopyBack/WriteThrough módok az MMU segítségével
- 68060
  - Instruction Prefetch
    egy hosszú word
  - Instruction Cache
    512 vonal á 16 byte = 8192 byte
    bekapcsolható, leállítható és felére csökkenthető a CACR segítségével
  - Branch Cache
    bekapcsolható a CACR segítségével
    nem érinti az MMU beállítást!
  - Superscalar Dispatch
    bekapcsolható a CACR segítségével
  - Data Cache
    512 vonal á 16 byte = 8192 byte
    bekapcsolható, leállítható és felére csökkenthető a CACR segítségével
    választható CopyBack/WriteThrough módok az MMU segítségével
  - Push Buffer
    kikapcsolható a PCR segítségével
  - Store Buffer
    bekapcsolható a CACR segítségével
    A lapok beállítása: NonCachable Serialized (precise)

#### A WHDLoad cache kezelése

Az első fontos dolog az, hogy a 68030..68060 cache kezelését a Cache Control Register (CACR) vezérli és az MMU (ha a WHDLoad használja és vezérli az MMU-t)!
A CACR-ben a cache globálisan be vagy kikapcsolható. Az MMU single Page (4 KByte a WHDLoad-dal) jelöli majd a cache típusát.
A 68030-on a memorialap vagy Cacheable vagy NotCacheable. A 68040/68060-on lehet WriteThrough, CopyBack, NonCachable (imprecise) vagy NonCachable Serialized (precise).

Ha az MMU-t nem használja a WHDLoad, akkor csak a CACR vezérli.

#### Alapértelmezett cache beállítás

Alaphelyzetben a WHDLoad, a Slave és az ExpMem területe cacheable CopyBack módban van. A BaseMem terület NonCachable, és a Data és az Instruction Cache be van kapcsolva a CACR-ben. Így a BaseMem területen futó program cache nélkül fut, de a WHDLoad és a Slave használja a cache-t a teljesítmény érdekében.

#### Programozók cache vezérlése

Két resload funkció vezérli a cache-t: resload_SetCACR és resload_SetCPU. A resload_SetCACR a régi rutin és teljesen lecserélhető a resload_SetCPU (a WHDLoad belül átirányítja a resload_SetCACR opcióit és meghívja a resload_SetCPU-t) által. A resload_SetCACR használata javasolt az olyan emberek számára, akik nem ismerik a cache rendszert és az Amigában levő változatát. A resload_SetCACR használatával az instruction és a data cache külön be vagy kikapcsolható. A resload_SetCACR csak a BaseMem terület cache módjait állítja.

#### Felhasználó cache vezérlése

Ha a programozó jó munkát végzett, a felhasználónak nem kell semmit sem beállítania a cache-el kapcsolatban, mivel a Slave mindent beállít.
Két oka lehet a cache beállítás kézi beállításának. Először azért, hogy ha install túl gyorsan fut (pl. grafikus hibákat generál) és másodszor azért, hogy az installált program gyorsabban működjön.

Egy lefagyó programot is működésre lehet bírni a NoCache opcióval. Ez az opció kikapcsolja az összes cache-t és a memóriát NonCachable Serialized (precise) típusúnak állítja be. Ha a gépnek van 32-bites Chip-memóriája, az még mindig gyorsabb mint az eredeti A500.

Ha az installált programot gyorsítani szeretnéd, van néhány opció a cache bekapcsolására. Ez felülírja a Slave beállításait. 68020-on a Cache opció állítható be. 68030-on a DCache opció is használható, amely magában foglalja a Cache opciót is. 68060-on van még néhány egyéb opció: BranchCache, StoreBuffer és SuperScalar. A ChipNoCache/S opció növelheti a teljesítményt 68040-en és 68060-on, lásd később.

#### A Chip-memória cache vezérlése

A cache kezelését sem a CPU nem tudja beállítani (CACR), sem az MMU, hanem egy külső hardver. A CPU tud jelezni a buszon, ha megpróbálja elérni a cache-t. És a külső hardver tud jelezni a CPU-nak (miután a cím ki lett rakva a címbuszra a memóriahozzáférés alatt) hogy a hozzáférést nem cache-elhető.
Az a mechanizmus, ahogy a hardver jelez a CPU-nak hogy a memória cache-elhető vagy nem, minden olyan AMigán és turbókártyán (SZVSZ) megtalálható, ahol a CPU >= 68030 (mert ezekben van adat cache). Az egész Chip-memória és az Space (Cia/Custom/RTC) nem cache-elhető az adat cache által. Ez azért szükséges, hogy az inkonzisztenciákat elkerüljük, például a DMA tevékenység miatt.
A CPU válasza a nem cache-elhető hozzáférésre különbözik processzoronként. 68030-on nincs jelentősége a teljesítményre, az adatok nincsenek cache-elve. 68040-en az olvasási hozzáférések teljes sebességgel futnak, és az írási hozzáférések (CopyBack) le lesznek állítva és újra lesznek indítva cache nélkül, ami ötször lassabb (függ a hardvertől és a CPU sebességétől) lesz a nem cache-elt hozzáféréssel szemben. 68060-on az olvasási és az írási hozzáférések le lesznek állítva és újra lesznek indítva. Az olvasási hozzáférések háromszor lesznek lassabbak és az írási hozzáférések ötször.
Az említett esetek az adat hozzáférésekre vonatkoznak. Az utasítás hozzáférések általában nem érintettek és cache-elhetők a Chip-memórián belül. Van néhány (valószínűleg hibás) hardver, amely nem engedi az utasítások cache-elését a Chip-memóriában. Az ilyen hardvereken a ChipNoCache/S opciót használd a jelentős lassulás elkerülése végett, mert egyébként kb. fele sebességel fogank zajlani az utasítások.

Ellenőrizheted a géped működését, ha futtatod a Speed.Slave programot, amely az `src/memory-speed` könyvtárban található a fejlesztői csomagban.

#### Write Allocation

A Write Allocation vezérli a 68030 cache kezelését, amikor cache kihagyás történik egy írási műveletnél. A Write Allocation-t be kell kapcsolni, ha az installált program User Mode-ban fut. Ha az installált program csak Supervisor Mode-ban fut, akkor a Write Alloction kikapcsolható, ami ad egy minimális teljesítmény-növekedést.

#### Branch Cache

A Branch Cache csak 68060-on érhető el. Ez egyfajta utasítás cache, az utasítások összefogásával. De abban különbözik az utasitás cache-től, hogy független az MMU beállítástól! Ez azt jelenti, hogy ha a megfelelő memórialap nem cache-elhetőként van jelölve, az összefogott utasítások akkor is cache-elve lesznek, ha a Branch Cache be van kapcsolva.

További információkért olvasd el a Motorola Microprocessors Felhasználói Kézikönyvet. Ha van javításod vagy egyéb információd ezzel az oldallal kapcsolatban, kérlek írj nekem.