Le MIPS R10000 implémente deux niveaux de caches. Un cache primaire d'instructions de 32 Koctets et un cache primaire de données de 32 Koctets sont intégrés sur le composant. Un cache unifié externe de 512 Koctets à 16 Moctets doit être ajouté. Les deux caches internes permettent un accès simultané aux instructions à charger, et aux données à charger ou à sauvegarder. Les deux niveaux de caches sont associatifs par ensemble à deux voies et utilisent une politique de remplacement de type Least Recently Used (LRU).
Au chargement d'une ligne d'instructions, les instructions sont partiellement décodées avant d'être placées dans le cache primaire d'instructions. Quatre bits supplémentaires sont alors associés à chaque instruction pour désigner l'unité d'exécution dans laquelle l'instruction doit être lancée.
Le MIPS R10000 intègre un cache primaire d'instructions de 32 Koctets (plus 4 Koctets de prédécodage). Ce cache est associatif par ensemble à deux voies. Une ligne du cache d'instructions est composée de 16 instructions de 36 bits (y compris 4 bits de prédécodage).
Le cache d'instructions est indexé avec l'adresse virtuelle et étiqueté avec l'adresse physique. Un bit de validité associé à chaque ligne permet de maintenir la cohérence du cache d'instructions avec la mémoire.
Le MIPS R10000 intègre un cache primaire de données de 32 Koctets. Il est composé de deux bancs entrelacés (voir figure ). Chaque banc est associatif par ensemble à deux voies. L'entrelacement des deux bancs permet à la fois, la mise à jour du cache interne par une donnée en défaut, et l'accès par le microprocesseur. La taille d'une ligne de cache est de 32 octets. Le cache de données est non-bloquant.
Le cache de données utilise la politique d'écriture write-back. Ce cache est virtuellement indexé et physiquement étiqueté. L'indexation virtuelle permet au cache d'être indexé au même cycle que la génération de l'adresse virtuelle. Cependant, le cache est physiquement étiqueté pour maintenir la cohérence avec le cache secondaire.
Le MIPS R10000 intègre l'ensemble de la logique nécessaire à l'implémentation d'un cache secondaire unifié de taille comprise entre 512 Koctets et 16 Moctets. Seuls les composants mémoire sont à ajouter pour ce cache secondaire. Ce cache secondaire externe est obligatoire. Deux tailles de ligne sont possibles : 64 ou 128 octets. Ce cache externe est associatif par ensemble à deux voies et utilise un algorithme de remplacement de type LRU. Le cache secondaire est composé d'un tableau de données de largeur 138 bits (128 bits pour les données, 9 bits pour le code correcteur d'erreur et 1 bit de parité) et d'un tableau d'étiquettes de largeur 33 bits (26 bits pour les étiquettes et 7 bits pour le code correcteur d'erreur).
Le cache secondaire utilise la politique d'écriture write-back. Le cache est physiquement indexé et physiquement étiqueté.
La mise en oeuvre d'un cache secondaire externe associatif par ensembles pose un problème majeur en terme de contrôle. Afin de limiter la latence d'accès, on désirerait accéder les données en parallèle avec les étiquettes. Sur un cache secondaire externe, ceci pose le problème du nombre de broches d'E/S du composant.
Le MIPS R10000 utilise un cache secondaire externe associatif par ensemble à deux voies. Afin de remédier au défaut mentionné ci-dessus, le banc du cache où est présente la donnée accédée est prédit à partir d'une table de 8 Kbits intégrée dans le MIPS R10000. Cette table mémorise le banc le plus récemment utilisé pour 8 Klignes de cache externe.
À chaque lecture du cache externe, le microprocesseur lit les données du banc prédit par la table. Au même moment, les étiquettes des deux bancs sont lues séparément à travers une interface. Il faut au moins deux cycles pour recharger une ligne des caches internes. Ceci est fait en même temps que la lecture des deux étiquettes. Trois solutions sont possibles après la comparaison des étiquettes :
La table de prédiction de banc peut couvrir jusqu'à 2 Moctets de mémoire du cache secondaire pour une taille de bloc de 128 octets. Si le cache secondaire excède cette taille, l'exactitude de la prédiction diminue légèrement. Ceci est toutefois compensé par les performances obtenues pour un cache secondaire plus grand.
En utilisant un cache externe deux fois moins rapide que le microprocesseur, la pénalité minimale d'un chargement depuis le cache externe est de six cycles pour une bonne prédiction du banc et de douze cycles pour une mauvaise. Mips Technology Inc estime que la prédiction de banc est bonne dans 90 % des cas.