Ovládanie CPU Cache

### Prehľad CPU Cache

Niektoré procesory z radu 68k sú schopné používať cache počas prístupu k pamäti, čo zlepšuje výkon.
Na cache sa vždy odkazuje pomocou logických adries, vrátane funkčného kódu pre prístup. To znamená, že prístupy v Užívateľskom móde a Supervisor móde budú vytvárať odlišné cache položky do (pre viac informácií si preštudujte dokumentáciu od Motoroly).

Nasleduje prehľad CPU 68k:

- 68000 žiadna
- 68010
  - Instruction Prefetch
    dvojwordový prefetch, jednowordový dekódovací register
  - Loop Mode
    vzniká, ak je jednowordová inštrukcia nasledovaná DBcc, žiadna ďalšia inštrukcia sa už neobjaví, kým sa cyklus neskončí
- 68020
  - Instruction Prefetch
    jeden longword
  - Instruction Cache
    16 lines á 16 byte = 256 bytes
    môže byť aktivovaná alebo vypnutá cez CACR
- 68030
  - Instruction Prefetch
    jeden longword
  - Instruction Cache
    16 lines á 16 byte = 256 bytes
    mmôže byť aktivovaná alebo vypnutá cez CACR
  - Data Cache
    16 lines á 16 byte = 256 bytes
    môže byť aktivovaná alebo vypnutá cez CACR
    vždy WriteThrough
    voliteľný Write Allocation mód
- 68040
  - Instruction Prefetch
    jeden longword
  - Instruction Cache
    256 lines á 16 byte = 4096 bytes
    môže byť aktivovaná cez CACR
  - Data Cache
    256 lines á 16 byte = 4096 bytes
    môže byť aktivovaná cez CACR
    voliteľné módy CopyBack/WriteThrough cez MMU
- 68060
  - Instruction Prefetch
    jeden longword
  - Instruction Cache
    512 lines á 16 byte = 8192 bytes
    môže byť aktivovaná, vypnutá alebo redukovaná na polovicu cez CACR
  - Branch Cache
    môže byť aktivovaná cez CACR
    nie je ovplyvniteľná cez MMU setup!
  - Superscalar Dispatch
    môže byť aktivovaná cez CACR
  - Data Cache
    512 lines á 16 byte = 8192 bytes
    môže byť aktivovaná, vypnutá alebo redukovaná na polovicu cez CACR
    voliteľné módy CopyBack/WriteThrough cez MMU
  - Push Buffer
    môže byť vypnutá cez PCR
  - Store Buffer
    môže byť aktivovaná cez CACR
    Stránky nesmú byť nastavené ako NonCachable Serialized (precise)

#### Manažovanie Cache vo WHDLoad

Prvou dôležitou vecou je pochopenie, že cache na 68030..68060 je ovládaná cez Cache Control Register (CACR) a MMU (za predpokladu, že WHDLoad používa a ovláda MMU)!
V CACR budú Cache globálne zapnuté alebo vypnuté. Používaním stránkovania MMU (4 KBytes s WHDLoad) bude určené, ako majú pracovať.
Na 68030 môže byť pamäťová stránka Cacheable alebo NotCacheable. Na 68040/68060 môže byť Cachable WriteThrough, cachable CopyBack, NonCachable (impercise) alebo NonCachable Serialized (precise). Ak WHDLoad nepoužíva MMU, ovláda cache len CACR.

#### Štandardné nastavenie Cache

Štandartne sú oblasti programu WHDLoad, Slave a ExpMem označené ako Cachable CopyBack. BaseMem oblasť je označená ako NonCachable a dátová a inštrukčná Cache sú zapnuté v CACR. Takže program v BaseMem oblasti beží bez Cache, ale WHDLoad a Slave používajú Cache na dosiahnutie najlepšieho výkonu.

#### Kontrola Cache programátorom

Existujú dve resload funkcie na ovládanie Cache a to: resload_SetCACR a resload_SetCPU. Resload_SetCACR je historicky staršia rutina a resload_SetCPU ju môže plne nahradiť. (WHDLoad interne mapuje argumenty resload_SetCACR a volá resload_SetCPU). Každopádne, použitie resload_SetCACR sa doporučuje pre všetkých, ktorí toho o správaní cache príliš nevedia. Používaním resload_SetCACR môžu byť jednotlivo vypnuté alebo zapnuté inštrukčné a dátové cache. Resload_SetCACR ovplyvňuje len schopnosť používať Cache BaseMem oblasti.

#### Kontrola Cache užívateľom

Ak programátor odviedol dobrú prácu, užívateľ sa nemusí o cache vôbec starať, pretože všetko zariadi nastavenie Slave.
Môžu sa však vyskytnúť dva dôvody na zmenu nastavenia cache. Prvým je spojazdnenie inštalačky, ktorá má nejaké problémy, pretože beží príliš rýchlo (napr. grafické chyby) a druhým je urýchlenie nainštalovaného programu.

Na spojazdnenie inštalačky môže byť použitá voľba NoCache. Táto voľba vypne všetky Cache a označí pamäť ako NonCachable Serialized. Ak má ale stroj 32-bitovú Chip RAM, bude ešte stále rýchlejší než pôvodná A500.

Na urýchlenie programu môžete nastaviť niektoré voľby, ktoré cache zapnú. Tie majú väčšiu prioritu ako nastavenie v Slave. Na 68020 môže byť použitá voľba Cache. Pre CPU 68030 je určená voľba DCache ktorá je už ale obsiahnutá vo voľbe Cache Pre 68060 existuje viac volieb: BranchCache, StoreBuffer a SuperScalar. Voľba ChipNoCache/S môže vylepšiť výkon na 68040 a 68060, pozri nižšie.

#### Použitie Cache na pamäť typu Chip

Použitie cache nemusí byť zapnuté len samotným procesorom (CACR) a nastavením MMU, ale i externým hardvérom. CPU na zbernici signalizuje, že sa pokúša použiť cache na prístupy. A externý hardvér môže odpovedať (po tom, ako adresa bola počas pamäťového prístupu vložená do adresy zbernice), že na tento prístup sa chache nesmie použiť. Tento mechanizmus, kedy hardvér pre CPU signalizuje, či sa na danú pamäť dá použiť cache alebo nie, je podľa mojich znalostí použitý na všetkých Amigách a doskách s procesorom 68030 a vyšším (pretože tie majú dátovú cache). Ovplyvnená je celá Chip pamäť a IO-Space (CIA/Custom/RTC), na ktorý však nesmie byť použitá dátová cache. Toto je dôležite kvôli vyvarovaniu sa cache nekozistencii, napríklad kvôli aktivite DMA.
Ak hardvér odmietne použitie cache, reakcia procesoru je rôzna v závislosti na CPU. Na 68030 sa to neodrazí vo výkonnosti, na dáta jednoducho nebude použitá cache. Na 68040 prístupy typu read budú vykonávané v plnej rýchlosti, zatiaľ čo write prístupy (CopyBack) budú zrušené a reštartované bez použitia cache. To sa prejaví približne päťnásobným spomalením rýchlosti (závisí to na hardvéri a rýchlosti CPU). Na 68060 budú zrušené a reštartované oba druhy prístupov. Čítanie sa spomalí trikrát a zapisovanie päťkrát.
Spomenuté poznámky majú vzťah k dátovej cache. Inštrukčné prístupy sú týmto procesom zvyčajne nedotknuté a je na ne možné použiť cache i v rámci Chip pamäte. Existuje však hardvér (pravdepodobne vadný), ktorý to nedovoľuje. Potom treba použiť voľbu ChipNoCache/S, pomocou ktorej sa vyhneme výraznému spomaleniu chodu programu. V opačnom prípade budú inštrukčné prístupy dvakrát pomalšie.

Toto správanie si môžete preveriť spustením Speed.Slave, ktorý sa nachádza v src/memory-speed adresári v developerskom archíve.

#### Write Allocation

Write Allocation kontroluje ovládanie cache na 68030, keď sa prihodí zlyhanie cache pri zápise. Write Allocation musí byť zapnutá, keď časti nainštalovaného programu bežia v Užívateľskom móde. Ak nainštalovaný program beží v Supervisor móde, môže byť Write Allocation vypnutá, čo poskytne jemné zvýšenie výkonu.

#### Branch Cache

Branch Cache je dostupná len na 68060. Je to druh inštrukčnej Cache pre Branch inštrukcie. Ale na rozdiel od inštrukčnej Cache však nie je ovplyvniteľná cez nastavenie MMU! To znamená, že i keď je zodpovedajúca stránka pamäte označená ako NonCachable, na Branch inštrukcie bude vždy použitá cache (ak je Branch Cache zapnutá).

Prečítajte si Motorola Microprocessors User Manuals pre ďalšie informácie. Ak máte pripomienky, čo sa týka tejto stránky, prosím píšte na e-mail.

Prípadné nejasnosti najprv konzultujte s anglickým originálom. To platí pre väčšinu odborných statí tejto dokumentácie.