Un manque de capacité se produit car les blocs sont rejetés du cache car le cache ne peut pas contenir tous les blocs nécessaires à l'exécution du programme (l'ensemble de travail du programme est beaucoup plus grand que la capacité du cache).
Un échec de conflit se produit dans le cas de stratégies de placement de blocs associatifs ou mappés directement, des échecs de conflit se produisent lorsque plusieurs blocs sont mappés sur le même ensemble ou la même trame de bloc; aussi appelés collisions manquées ou interférences manquées.
Sont-ils réellement très proches?
Par exemple, si toutes les lignes de cache sont remplies et que nous avons une demande de lecture pour la mémoire B, pour laquelle nous devons expulser la mémoire A.
Doit-il donc être considéré comme un manque de capacité car nous n'avons pas assez d'espace? Et plus tard, si nous voulons accéder à la mémoire A, et comme elle a été expulsée auparavant, elle est considérée comme un conflit manqué.
Suis-je bien comprendre? Merci
La distinction importante ici est entre les erreurs de cache causées par la taille de votre ensemble de données et les erreurs de cache causées par la façon dont votre cache et l'alignement des données sont organisés.
Supposons que vous disposez d'un cache mappé direct de 32 Ko et considérons les 2 cas suivants:
Vous itérez à plusieurs reprises sur un tableau de 128 Ko. Il n'y a aucun moyen que les données puissent tenir dans ce cache, donc tous les échecs sont ceux de capacité (sauf le premier accès de chaque ligne qui est un échec obligatoire, et resterait même si vous pouviez augmenter votre cache à l'infini).
Vous avez 2 petits tableaux 8k, mais malheureusement ils sont tous les deux alignés et mappés sur les mêmes ensembles. Cela signifie que bien qu'ils puissent théoriquement tenir dans le cache (si vous corrigez votre alignement), ils n'utiliseront pas la taille complète du cache et rivaliseront pour le même groupe d'ensembles et se débattront les uns les autres. Ce sont des conflits manqués, car les données pourraient correspondre, mais entrent toujours en collision en raison de l'organisation. Le même problème peut se produire avec des caches associatifs définis, bien que moins souvent (disons que le cache est bidirectionnel, mais vous avez 4 ensembles de données alignés ...).
Les 2 types sont en effet liés, vous pourriez dire que compte tenu des niveaux élevés d'associativité, de l'inclinaison définie, des alignements de données appropriés et d'autres techniques, vous pouvez réduire les conflits, jusqu'à ce que vous vous retrouviez principalement avec de véritables manques de capacité inévitables.
Ma définition préférée pour les ratés de conflit de Réduire les manquements obligatoires et de capacité par Norman P. Jouppi:
Les échecs de conflit sont des échecs qui ne se produiraient pas si le cache était entièrement associatif au remplacement de LRU.
Regardons un exemple. Nous avons un cache à mappage direct de taille 4. Les séquences d'accès sont
0(compulsory miss), 1(compulsory miss), 2(compulsory miss), 3(compulsory miss), 4(compulsory miss), 1(hit), 2(hit), 3(hit), 0(capacity miss), 4(capacity miss), 0(conflict miss)
L'avant-dernier 0 est un manque de capacité car même si le cache était entièrement associatif avec le cache LRU, cela provoquerait toujours un manque car 4,1,2,3 sont accessibles avant le dernier 0. Cependant, le dernier 0 est un conflit car dans un cache entièrement associatif, les 4 derniers auraient remplacé 1 dans le cache au lieu de 0.
Omission obligatoire: lorsqu'un bloc de mémoire principale essaie d'occuper une nouvelle ligne vide de cache et que le tout premier accès à un bloc de mémoire qui doit être mis en cache est appelé miss obligatoire.
Conflit miss: quand il y a encore des lignes vides dans le cache, le bloc de mémoire principale est en conflit avec la ligne de cache déjà remplie, c'est-à-dire. Même quand une place vide est disponible, le bloc essaie d'occuper déjà ligne remplie. son conflit appelé miss.
Capacité manquée: une erreur s'est produite lorsque toutes les lignes du cache sont remplies.
un échec de conflit se produit uniquement dans le cache mappé direct et le cache associatif d'ensemble. Parce que dans le mappage associatif, aucun bloc de mémoire principale n'essaie d'occuper une ligne déjà remplie.