210 votes

Comment fonctionnent les lignes de cache ?

Je comprends que le processeur introduit des données dans le cache par le biais de lignes de cache, qui - par exemple, sur mon processeur atom - introduisent environ 64 octets à la fois, quelle que soit la taille des données réellement lues.

Ma question est la suivante :

Imaginez que vous ayez besoin de lire un octet de la mémoire, quels sont les 64 octets qui seront amenés dans le cache ?

Les deux possibilités que je vois sont les suivantes : soit les 64 octets commencent à la limite de 64 octets la plus proche sous l'octet concerné, soit les 64 octets sont répartis autour de l'octet d'une manière prédéterminée (par exemple, moitié en dessous, moitié au-dessus, ou tout au-dessus).

Laquelle ?

173voto

user434507 Points 4225

Si cette ligne de cache n'est pas déjà présente dans le cache, votre CPU demandera les 64 octets qui commencent à la limite de la ligne de cache (la plus grande adresse en dessous de celle dont vous avez besoin qui est multiple de 64). Il commencera par faire entrer les 8 octets autour de l'octet dont vous avez besoin, à nouveau alignés sur le multiple de 8, pour la simple raison que tous les modules de mémoire des PC modernes ont une largeur de bande de 64 bits (8 octets) et fonctionnent donc sur 8 octets à la fois. En règle générale, si le processeur ne peut pas prévoir cet accès à la mémoire, le processus de récupération peut prendre 10 à 30 nanosecondes. Ensuite, pendant que vous travaillez avec l'octet, le processeur tire les 56 octets restants dans le cache.

24voto

Kaz Points 18072

Si les lignes de cache ont une largeur de 64 octets, elles correspondent à des blocs de mémoire qui commencent à des adresses divisibles par 64. Les 6 bits les moins significatifs de toute adresse constituent un décalage dans la ligne de cache.

Ainsi, pour tout octet donné, la ligne de cache qui doit être extraite peut être trouvée en effaçant les six bits les moins significatifs de l'adresse, ce qui correspond à un arrondi à l'adresse la plus proche qui est divisible par 64.

7voto

jweyrich Points 10002

Les processeurs peuvent avoir des caches à plusieurs niveaux (L1, L2, L3), qui diffèrent par leur taille et leur vitesse.

Cependant, pour comprendre ce qui entre exactement dans chaque cache, vous devrez étudier le prédicteur de branchement utilisé par ce processeur spécifique, et comment les instructions/données de votre programme se comportent par rapport à lui.

Lire la suite prédicteur de branche , Cache du CPU et politiques de remplacement .

Ce n'est pas une tâche facile. Si, à la fin de la journée, tout ce que vous voulez est un test de performance, vous pouvez utiliser un outil tel que Cachegrind . Toutefois, comme il s'agit d'une simulation, le résultat peut varier dans une certaine mesure.

4voto

bramp Points 3769

Je ne peux pas le dire avec certitude car chaque matériel est différent, mais c'est typiquement "64 octets commencent à la limite de 64 octets la plus proche" car c'est une opération très rapide et simple pour le CPU.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X