Est-ce que l'écriture par des copies en cache le bloc entier ou juste l'octet qui est mis à jour?

cs.stackexchange https://cs.stackexchange.com/questions/9221

  •  16-10-2019
  •  | 
  •  

Question

Juste une question fondamentale à poser

Est-ce que par des copies d'écriture du cache du bloc entier ou seulement l'octet qui est mis à jour?

Je suis passé par la question suivante

Tableau A contient 256 éléments de 4 octets chacun. Son premier élément est stocké à l'adresse physique 4096. Le module B contient 512 éléments de 4 octets chacun. Son premier élément est stocké à l'adresse physique 8192. On suppose que seuls les tableaux A et B peuvent être mises en cache dans un vide d'abord, adressé physiquement, physiquement marqué, direct mappée, cache 2K octets avec une taille de bloc de 8 octets. La boucle suivante est l'exécution

for(i=0; i<256; i++)
A[i] = A[i] + B[2*i];

Combien d'octets seront écrites dans la mémoire si le cache a une écriture par la politique?

I calculé comme il suit:

Le cache permet de stocker la totalité du tableau avec 2 éléments par bloc (taille de bloc = 8 octets, la taille d'élément = 4 octets). Pour chaque écriture, le bloc entier sera copié. 0 $ ^ {e} $ élément, le bloc contenant $ 0 ^ {e} $ et 1 $ ^ {e} élément $ serait écrit. La même chose serait fait pour 1 $ ^ {st} $ élément ainsi.

Ainsi, pour chaque itération les 2 éléments écrirait. Cela rend le nombre d'octets que 256 $ * 2 * (4bytes / élément) = 2048bytes $.

Mais dans la solution, ils ont juste de calculer le nombre d'itérations de la boucle (256 $) $ multiplié par ce qui rend la réponse $ 1024bytes $ la taille de l'élément ($ 4byte $). Si cela est vrai, alors le cache ne mettre à jour que l'octet mis à jour (pas le bloc entier).

Ce qui est correct?

Était-ce utile?

La solution

Les stratégies de mise en cache pourrait être très « spécifique de domaine », comme la mise en cache de données efficace pour la structure de données numériques, des structures de données du graphique et des algorithmes, la structure de données bio-informatique, etc .. Ceci est une belle thèse de doctorat à ce sujet: "Algorithmes Cache-efficace et structures de données: théorie et évaluation expérimentale"

Pour votre programme spécifique je pense qu'il cache bloc entier de la mémoire non seulement les données spécifiques dans le tableau. Il utilise une stratégie de cache générale. Voir algorithmes de cache sur Wikipédia.

Autres conseils

Je dirais que l'écriture dans le cache sait toujours quelles unités adressables doivent être écrites, donc il n'y a absolument aucune raison pour laquelle il devrait écrire le reste du bloc. Par conséquent, il ne fonctionne pas.

Je suis volontairement en disant « unités adressables », parce que (si je ne suis pas sûr) il être aligné unités généralement de la même largeur que le bus, à savoir habituellement de 4 octets. Mais cela n'a pas d'effet ici lorsque les éléments sont de 4 octets.

Contrairement réduction de valeur retour cache est susceptible de ne conserver que le statut modifié par bloc. Toutefois, un cache en écriture serait retarder les écritures et que les passes consécutives jusqu'à la fin de la boucle en blocs entiers d'écraser, il serait toujours 1024 octets écriture seulement.

La réponse dépend vraiment de la mise en œuvre.

Un cache et sous-système mémoire peut être conçu pour soutenir écrit sur une granularité d'octets, mais ne doit pas être.

Par exemple, si l'interface mémoire est 8B large et peut prendre en charge seulement 1 écriture à la fois (et la taille de ligne de cache est 8B), il n'y a pas de point par écrit seulement 1 octet dans une écriture par le scénario (je suppose qu'il ya de légères économies d'énergie, mais il serait probablement éclipsée par la complexité du suivi octet permet).

La plupart des caches traitent des blocs entiers de données (quelle que soit la taille de la ligne de cache est). Mais, la plupart des caches ne sont pas en écriture par. Cependant, ils soutiennent souvent écrit un octet sélectionné pour non-cacheable / données non-temporelles que les données ne sont pas mises en cache.

Un cache fonctionne en transférant un bloc à la fois de / vers la RAM, il copie un bloc complet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top