Gestió de la Cache de la CPU

### Vista General de la memòria caché de la CPU

Per a millorar el rendiment, algunes CPU's de la familia 68k disposen de la possibilitat d'emmagatzemar accessos a memòria caché.
A la informació a caché sempre s'hi accedeix emprant adreces lògiques, incloent-hi el codi de la funció que realitza l'accés. Això significa que els accesos en Mode Usuari i Mode Supervisor crearan diferents entrades a la caché (si us plau consulti la documentació de Motorola per a més informació).

seguint amb la vista general sobre les capacitats d'ús de caché a les CPU's 68k:

- 68000 cap.
- 68010
  - Pre-captura d'Instruccions (Instrucció Prefetch)
    Pre-captura de dos paraules, registre de decodificació d'una paraula
  - S'entra al Mode Cíclic (Loop Mode)
    quan una instrucció d'una paraula ve seguida per un DBcc; no es realitzaran més captures d'instruccions fins que s'acabi el cicle.
- 68020
  - Pre-captura d'Instruccions (Instrucció Prefetch) d'una
    paraula llarga
  - Caché d'Instruccions
    16 línies de 16 bytes = 256 bytes
    Pot ésser activada o "congelada" usant el CACR
- 68030
  - Pre-captura d'Instruccions (Instrucció Prefetch) d'una
    paraula llarga
  - Caché d'Instruccions
    16 línies de 16 bytes = 256 bytes
    Pot ésser activada o "congelada" usant el CACR
  - Caché de Dades
    16 línies de 16 bytes = 256 bytes
    Pot ésser activada o "congelada" usant el CACR
    sempre amb WriteThrough
    mode "Write Allocation" seleccionable
- 68040
  - Pre-captura d'Instruccions (Instrucció Prefetch) d'una
    paraula llarga
  - Caché d'Instruccions
    256 línies de 16 bytes = 4096 bytes
    Pot ésser activada usant el CACR
  - Caché de Dades
    256 línies de 16 bytes = 4096 bytes
    Pot ésser activada usant el CACR
    modes CopyBack/WriteThrough seleccionables emprant la MMU
- 68060
  - Pre-captura d'Instruccions (Instrucció Prefetch) d'una
    paraula llarga
  - Caché d'Instruccions
    512 líneas de 16 bytes = 8192 bytes
    Pot ésser activada, "congelada" i reduïda a la meitat usant el CACR
  - Caché de Ramificacions (Branch Cache)
    Pot ésser activada usant el CACR
    No es veu afectada degut a la configuració de la MMU!
  - "Superscalar Dispatch"
    Pot ésser activada usant el CACR
  - Caché de Dades
    512 línies de 16 bytes = 8192 bytes
    Pot ésser activada, "congelada" i reduïda a la meitat usant el CACR
    modes CopyBack/WriteThrough seleccionables emprant la MMU
  - Buffer per a Push
    Pot ésser desactivada usant el PCR
  - Buffer d'Emmagatzemament (Store Buffer)
    Pot ésser activada usant el CACR
    Les pàgines han d'ésser "NoCachables" Serialitzades (precís).

#### Gestió de la Caché a WHDLoad

La primera cosa important és comprendre que les caches en els 68030..68060 són controlades pel registre de Control de Caché (Cache Control Register, CACR) i la MMU (assumint que WHDLoad utilitza i controla la MMU)!
En el CACR les cachés poden ser activades o desactivades de forma global. Usant les Pàgines individuals de la MMU (4 KByte amb WHDLoad) es marcaran com han de ser posades a memòria caché.
Al 68030 una pàgina de memòria pot ser "Cachable" o "NonCachable". En un 68040/68060 pot ser "Cachable" amb "WriteThrough", "Cachable" amb "CopyBack", "NonCachable" (imprecís) o "NonCachable" Serialitzada (precís).

Si la MMU no està éssent utilitzada per WHDLoad, només controla el CACR.

#### Configuració per defecte de la Caché

Per defecte, les àrees de WHDLoad, l'Esclau i "ExpMem" són marcades com a "Cachables" amb "CopyBack". L'àrea "BaseMem" és marca com a "NonCachable", i les Cachés de Dades i Instruccions són activades al CACR. Per tant, els programes situats en l'àrea "BaseMem" s'executen sense Cachés, però WHDLoad i l'Esclau usen les Cachés per a un millor rendiment.

#### Control de la Caché per part del Programador

Existeixen dos funcions "resload" per a controlar las Cachés: resload_SetCACR y resload_SetCPU. La resload_SetCACR és la rutina històricament més vella i pot ésser reemplaçada completament per resload_SetCPU (WHDLoad mapeja internament els arguments de resload_SetCACR i crida a resload_SetCPU). De totes maneres l'ús de resload_SetCACR es recomana per a totes aquelles persones que no ho coneixen tot sobre les Cachés i el seu comportament en un sistema Amiga. Emprant resload_SetCACR les cachés d'instruccions i dades poden ser activades o desactivades de forma separada. resload_SetCACR només afecta a la capacitat d'emmagatzemar a caché l'àrea "BaseMem".

#### Control de la Caché per part de l'Usuari

Si el programador ha fet un bon treball, l'usuari no ha de fer gens relacionat amb les Cachés degut al fet que tota la configuració requerida ja ha estat realitzada a l'Esclau.
No obstant això, hi pot haver dos raons per a canviar manualment la configuració de la Caché. Primer, per a fer que un instal·lador funcioni quan té problemes degut al fet que s'executa massa ràpid (per ex. generant errors en la sortida gràfica) i segon per a fer que un programa instal·lat s'executi mes ràpidament.

Per a fer que un programa que ocasiona una caiguda del sistema funcioni, es pot activar l'opció "NoCache". Aquesta opció desactiva totes les cachés i marca tota la memòria com a "NonCachable" Serialitzada (precís). Si la màquina té Memòria Xip de 32 bits continuarà éssent més ràpida que un A500 original.

Per a fer que un programa instal·lat s'executi mes ràpidament poden configurar-se algunes opcions que habilitin les Cachés. Aquesta configuració sobreescriurà la de l'Esclau. Al Motorola 68020 pot configurar-se l'opció Cache. Al 68030 també pot utilitzar-se la opció DCache, que inclou també la opció Caché. Un 68060 disposa d'algunes opcions més: BranchCache, StoreBuffer i SuperScalar. L'opció ChipNoCache/S pot millorar el rendiment als 68040 i 68060 (veure més avall).

#### Possibilitat d'emmagatzemar a caché la memòria Xip

La possibilitat d'emmagatzemar a caché pot fer-se no solament per mitjà de la CPU (CACR) i la configuració de la MMU sinó també mitjançant maquinari extern. La CPU envia un senyal al bus si intenta emmagatzemar a caché una adreça. I un maquinari extern pot enviar un senyal a la CPU (després que una adreça ha estat col·locada en el bus d'adreces durant un accés a memòria) indicant que una adreça no ha d'ésser emmagatzemada a caché.
El mecanisme pel qual el maquinari envia el senyal a la CPU indicant si la memòria és "Cachable" o no és utilitzat en tots els Amigues (fins a on jo sé) i les targes de CPU amb processadors >= 68030 (degut al fet que tenen una caché de dades). Això inclou tota la Memòria Xip i l'Espai d'E/S (CIA/Custom/RTC) que no ha d'ésser emmagatzemat a caché per la caché de dades. Això és necessari per a evitar inconsistències a la caché, per exemple degudes a activitat DMA.
La reacció de la CPU davant un rebuig del maquinari a emmagatzemar a caché un accés varia entre les diferents CPU's. Al 68030 no hi ha cap impacte en el rendiment de l'accés: les dades simplement no són guardades a caché. Al 68040 els accessos de lectura es realitzen a la màxima velocitat però els accessos d'escriptura ("CopyBack") seran cancel·lats i reiniciats sense guardar a caché la qual cosa té com a conseqüència un accés aproximadament 5 vegades més lent (depenent del maquinari i la velocitat de la CPU) comparat amb un accés sense guardar a caché. En el 68060 les operacions de lectura i escriptura seran cancel·lades i reiniciades. Els accessos de lectura seran aproximadament 3 vegades més lents i els d'escriptura aproximadament 5 vegades més lents.
Els problemes esmentats estan relacionats amb l'accés a dades. Els accessos a instruccions usualment no es veuen afectats i són emmagatzematbles a caché fins i tot dintre de la Memòria Xip. Existeixen alguns components de maquinari (possiblement defecctuosos) que no permeten que les instruccions es s'emmagatzemin a caché a la Memòria Xip. En aquest tipus de maquinari s'ha d'emprar l'opció ChipNoCache/S per a evitar una major caiguda en la velocitat d'execució perquè a tot arreu els accessos a instruccions seran unes 2 vegades més lents.

Pot comprovar aquest comportament al seu oridinador si executa Speed.Slave que trobarà al directori `src/memory-speed` de l'arxiu de desenvolupament.

#### Assignació d'Escriptura (Write Allocation)

L'assignació d'escriptura controla la gestió de la caché al 68030 quan té lloc una pèrdua de caché durant una operació d'escriptura. L'assignació d'escriptura ha de ser activada quan parts del programa instal·lat s'executen en Mode Usuari. Si el programa instal·lat s'executa solament en Mode Supervisor l'assignació d'escriptura pot ésser desactivada, la qual cosa proporciona un mínim avantatge en el rendiment.

#### Caché de Ramificacions (Branch Cache)

La Caché de Ramificacions solament està disponible amb el processador 68060. És una espècie de caché d'instruccions per a instruccions de ramificació però contràriament al que passa amb la caché d'instruccions, no es veu afectada per la configuració de la MMU! Això significa que tot i que la Pàgina de memòria apropiada sigui marcada com "NonCachable", les instruccions de ramificació seran guardades a caché si la Caché de Ramificacions està activada.

Llegeixi el Manual d'Usuari de Microprocessadors Motorola per a major informació. Si vostè té correccions o addicions a aquesta plana, si us plau contacti amb mi.