[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

Généralités sur le cache CPU

Afin d'améliorer la vitesse d'exécution des programmes, certains CPUs de la famille des 68000 sont capable de "cacher" les accès mémoire.
Les caches sont toujours appelés à l'aide d'adresses logiques, incluant le code fonctionnel de l'accès. Cela signifie que des accès en mode utilisateur ou superviseur créent des entrées différentes dans le cache (consultez les documentations Motorola pour plus d'informations).

Voici un bref aperçu sur les CPUs de la famille des 68000:

Gestion du cache dans WHDLoad

La première chose importante est de comprendre que les caches sur 68030..68060 sont controlés par le registre de contrôle de cache (CACR) et le MMU!
Dans le CACR, les caches sont activés ou désactivés globalement. Les pages simples MMU (4 kilo-octets avec WHDLoad) possèdent un état décrivant comment elles sont cachées.
Sur le 68030, une page mémoire peut être cachable ou non cachable. Sur un 68040/68060, elle peut être cachable "writethrough", cachable "copyback" (pas d'écriture mémoire immédiate), non cachable (imprécis) ou non cachable sérialisé (précis).

Si le MMU n'est pas utilisé par WHDLoad, seulement le registre CACR sera modifié.

Réglages de cache par défaut

Par défaut, les zones utilisées par WHDLoad, le slave et l'extension mémoire, sont marquées en tant que cachable, copyback. La mémoire de base (chip) est marquée comme non cachable, et les caches de données et d'instructions sont activés dans le CACR. Ainsi, le programme situé dans la zone de mémoire de base fonctionne sans caches mais WHDLoad, le slave et l'extension de mémoire utilisent les caches pour une performance optimale. Si le MMU n'est pas utilisé par WHDLoad, les caches seront désactivés. Car sans MMU, une configuration différente pour des zones de mémoire ne peut être paramétrée, de plus si une des zones est marquée comme non cachable, tous les caches seront aussi désactivés.

Contrôle du cache par le programmeur

Il existe deux fonctions resload pour contrôler les caches: resload_SetCACR et resload_SetCPU. resload_SetCACR est l' ancienne routine, et peut être complètement remplacée par resload_SetCPU (WHDLoad retravaille les arguments passés à resload_SetCACR de façon interne et appelle resload_SetCPU). Cependant, l'utilisation de resload_SetCACR est recommandée pour tous les progammeurs qui ne connaissent pas tout sur les caches et leur comportement dans le système Amiga. En utilisant resload_SetCACR, le cache instruction et donnée peuvent être activés ou désactivés séparément. resload_SetCACR affecte uniquement la cachabilité de la mémoire de base.

Contrôle du cache par l'utilisateur

Si le programmeur a bien travaillé, alors l'utilisateur n'a rien à faire à propos des caches parce que les réglages sont déjà effectués dans le slave.
Néanmoins, il peut y avoir deux raisons pour justifier un changement manuel des réglages du cache. D'abord pour faire fonctionner un install qui ne fonctionne pas bien parce qu'il tourne trop vite (ex: erreurs graphiques) et ensuite pour faire tourner plus vite un programme installé.

Pour faire fonctionner un programme qui plante, l'option NoCache peut être utilisée. Cette option désactive tous les caches et marque toute la mémoire comme non cachable sérialisée (precis). Si la machine possède de la mémoire chip 32 bits, cela restera plus rapide que sur un A500 de base.

Pour améliorer la vitesse d'un programme installé, certaines options peuvent être positionnées pour activer les caches. Ces options sont prioritaires par rapport aux réglages du slave. Sur un 68020, l'option Cache peut être positionnée. Sur un 68030, l'option DCache peut être également utilisée, et elle inclut l'option Cache. Sur un 68060, il y a des options supplémentaires: BranchCache, StoreBuffer et SuperScalar. L'option ChipNoCache/S permet d'améliorer les performances sur68040 et 68060, voir ci-dessous.

Cachabilité de la mémoire chip

La cachabilité peut être réglée non seulement par le processeur lui-même (CACR) et les réglages MMU, mais également par du matériel externe. Le processeur signale sur le bus quand il tente de cacher un accès. De même, un périphérique externe peut envoyer un signal au processeur (après qu'une adresse ait été placée sur le bus d'adresse pendant un accès mémoire) lui demandant à ce qu'un accès ne soit pas caché.
Le mécanisme qui signale au processeur que la mémoire est cachable ou non est (d'après ce que je sais) utilisé sur tous les Amigas et cartes CPU qui contiennent un CPU 68030 ou supérieur (parce qu'ils possèdent un cache de données). Les zones affectées sont la totalité de la mémoire chip et l'espace mémoire des entrées-sorties (Cia/Custom/Horloge temps réel) qui ne doivent pas être cachés par le cache de données. Cela est nécessaire afin d'éviter les incohérences, par exemple à cause des mécanismes DMA.
La réaction du processeur sur un rejet de cachabilité pour une adresse dépend des types de processeurs. Sur le 68030 il n'y a pas d'impact sur la vitesse d'accès, les données ne sont pas cachées, c'est tout. Sur le 68040, les accès en lecture sont effectuées sans perte de vitesse mais les accès en écriture (copyback) sont annulés et redémarrés sans cachabilité, ce qui donne des accés 5 fois plus lents par rapport à des adresses non cachables. Sur le 68060, les accès en lecture et écriture sont annulés et redémarrés. Les accès lecture seront 3 fois plus lents, et les accès écriture seront 5 fois plus lents.
Les problèmes cités ci-dessus sont liés aux accès donnée. Les accès instruction ne sont pas affectés et sont aussi cachables dans la mémoire chip. Il existe des matériels (buggés) qui ne tolèrent pas que les instructions soient cachées dans la mémoire chip. Sur de tels matériels, l'option ChipNoCache/S doit être utilisée pour éviter un gros ralentissement de l'exécution (les accès instruction seront 2 fois plus lents).

Ce comportement peut être tester sur votre machine en exécutant Speed.Slave contenu dans le répertoire src/memory-speed de l'archive de développement.

Le mode Burst

Le mode Burst sur 68030 indique au CPU de toujours lire une ligne de cache complète (16 octets) si un défaut de cache apparait, au lieu d'un mot long. Le mode Burst doit être supporté par le matériel quand il est actif, sinon il n'y aura pas de Burst mais non plus de perte de performance. Il peut être activé séparément du cache d'instructions et de données. Un accès Burst prend davantage de temps qu'un simple accès, le gain de performance sera seulement notable si plusieurs entrées dans la ligne de cache ont été utilisées avant que celle-ci soit vidée. Pour le cache d'instruction, le mode Burst, en règle générale, améliore les performances. Pour le cache de données, c'est surtout en fonction des accès mémoire en lecture consécutive. WHDLoad active l'instruction Burst quand le cache d'instructions est actif à partir de la version 18.0. Le mode Burst pour le cache de données ne sera pas activé par WHDLoad.

Allocation écriture

L'allocation écriture contrôle la gestion du cache sur 68030 quand un défaut de cache se produit sur une opération d'écriture. L'allocation écriture doit être activée quand des parties du programme fonctionnent en mode utilisateur. Si le programme installé fonctionne uniquement en mode superviseur alors l'allocation écriture peut être désactivée, ce qui donne un léger avantage en termes de performances.

Cache de branchement

Le cache de branchement est disponible uniquement sur le 68060. C'est une sorte de cache instructions pour les instructions de branchement. Mais la différence avec le cache d'instructions, c'est qu'il n'est pas affecté par les réglages MMU! Cela signifie que même si la page souhaitée est marquée comme non cachable, les instructions de branchement seront cachées si le cache de branchement est activé.


Veuillez lire le Manuel Utilisateur des Microprocesseurs Motorola pour des informations supplémentaires. Si vous avez des corrections ou des ajouts à faire sur cette page, contactez moi SVP.
[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]