Cache à correspondance directe vs associatif par ensembles vs totalement associatif
Un cache doit déterminer où chaque bloc de mémoire peut être stocké. Dans un cache à correspondance directe, chaque bloc n'a qu'une seule ligne possible, ce qui est simple et rapide mais provoque des conflits lorsque deux blocs partagent une ligne. Dans un cache totalement associatif, un bloc peut aller n'importe où, ce qui évite les conflits mais exige une comparaison avec chaque ligne. Un cache associatif par ensembles est le compromis : un bloc peut aller dans l'une des quelques voies d'un ensemble. La plupart des caches de CPU sont associatifs par ensembles.
| Critère | Correspondance directe | Associatif par ensembles | Totalement associatif |
|---|---|---|---|
| Emplacement possible d'un bloc | Exactement une ligne, choisie par les bits d'index | N'importe laquelle des voies (par exemple 4 ou 8) d'un ensemble | N'importe quelle ligne du cache |
| Comparaisons de tags par accès | Une | Une par voie (par exemple 8) | Toutes les lignes à la fois, en parallèle |
| Temps d'accès en cas de succès | Le plus rapide | Légèrement plus lent | Le plus lent |
| Coût matériel et consommation | Les plus faibles | Modérés | Les plus élevés : un comparateur par ligne |
| Défauts de conflit | Les plus fréquents | Réduits à mesure que le nombre de voies augmente | Aucun : seuls les défauts obligatoires et de capacité subsistent |
| Politique de remplacement | Inutile : un seul choix possible | Choix au sein de l'ensemble (LRU ou approximations) | Choix parmi toutes les lignes |
| Usages typiques | Petits caches simples et certains microcontrôleurs | Caches L1, L2 et L3 de la plupart des CPU, généralement de 4 à 16 voies | Petites structures comme les TLB et les victim caches |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.