2017-01-29 10 views
1

Disons que la taille de la ligne de cache est de 64 octets et que j'ai un objet dont la taille est également de 64 octets. Si cet objet est accessible, il sera:Les données chargées dans le cache sont-elles alignées sur la taille de la ligne de cache?

  1. Tous chargés dans une ligne de cache
  2. Seule la partie entre le début de l'objet et le multiple de 64 octets sera chargé
  3. L'objet être chargé dans deux différentes lignes de cache
  4. Quelque chose d'autre

J'ai le sentiment que la réponse diffère d'un processeur à, mais quel est le résultat le plus probable sur CPU moderne de?

Répondre

1

En ce qui concerne le niveau d'instruction machine, le concept des objets disponibles dans les langages de niveau supérieur disparaît. L'accès à leurs membres via des opérations d'affectation de niveau supérieur sera traduit en instructions de lecture et d'écriture régulières. Donc, si le système d'exécution, ou la machine virtuelle du langage est intelligent et capable d'allouer des objets pour obtenir une meilleure utilisation du cache, dans votre cas, dans des adresses alignées 64 octets, lorsque le langage de niveau supérieur lit tout membre de l'objet, être n'importe où dans l'adresse alignée 64 octets, l'objet entier sera chargé à la cacheline (parce que son alloué à l'adresse 64 octets alignés). Si le système d'exécution est bête, s'il alloue juste des objets comme demandé dans le flux du programme, sans regarder dans les situations (64 objets octets et 64 octets de cache) comme mentionné dans votre question, puis quand une lecture arrive à un membre de l'objet, les données à l'adresse alignée 64 octets de ce membre seront chargés dans le cache. Par conséquent, dans ce dernier cas, vous devez être chanceux ou écrire du code de sorte qu'un padding spécial soit en place, à l'avant ou à l'arrière de l'objet pour aligner la ligne de cache.