2011-07-10 3 views
18

J'ai cette question sur ma mission cette semaine, et je ne comprends pas comment les caches peuvent être vaincues, ou comment je peux le montrer avec un programme d'assemblage .. Quelqu'un peut-il me diriger dans la bonne direction?Comment les caches peuvent-elles être détruites?

Montrez, avec des exemples de programmes d'assemblage, comment les deux différents caches (associatif et direct Mapping) peuvent être vaincus. Expliquez pourquoi cela se produit et comment il peut être réparé. Est-ce que les mêmes programmes sont utilisés pour vaincre les caches?

Remarque: Ceci est un devoir. Ne répondez pas simplement à la question pour moi, cela ne m'aidera pas à comprendre le matériel.

+1

S'il vous plaît juste marquer comme devoirs la prochaine fois. –

+1

Merci de vous identifier correctement comme devoirs :) reclassé pour vous –

+11

Vous obtenez un upvote pour non seulement admettre le travail à domicile, mais aussi pour être clair que vous souhaitez comprendre le matériel. –

Répondre

6

Un cache est là pour augmenter les performances. Donc vaincre un cache signifie trouver un modèle d'accès mémoire qui diminue les performances (en présence du cache) plutôt que de l'augmenter. Gardez à l'esprit que la taille du cache est limitée (plus petite que la mémoire principale, par exemple), ce qui implique généralement de le remplir pour qu'il rejette les données auxquelles vous êtes sur le point d'accéder, juste avant y accéder.

+0

Donc, ai-je raison de penser que la meilleure façon de montrer cela serait simplement de créer une boucle qui soit au moins une ligne de cache supérieure à la taille du cache, ou une combinaison de boucle et de lecture/stockage de données devrait être divisé entre deux lignes de cache? – John

+0

Vous pensez dans le bon sens, oui. Gardez à l'esprit que vous essayez de trouver un modèle moins efficace avec le cache que sans. En fonction des détails exacts du cache, lire simplement une grande quantité de données de manière séquentielle ne l'annulera probablement pas (vous n'en tirerez peut-être pas grand bénéfice, mais cela ne vous nuira pas non plus). L'astuce consiste à trouver un modèle où le coût du cache dépasse le bénéfice qu'il vous procure. –

3

Si vous cherchez un indice, pensez à diviser un mot de données sur 2 lignes de cache.

(Si vous êtes à la recherche aussi pour la réponse, un problème similaire a été rencontré par les développeurs x264 - plus d'informations disponibles here et here Les liens sont très instructifs, et je suggère vraiment que vous les lire, même après. J'ai trouvé votre réponse.)

0

Une autre chose à garder à l'esprit est de savoir si les caches que vous traitez sont virtuellement ou physiquement indexés/étiquetés. Dans certaines variantes, l'alias de cache force les remplacements de ligne même si le cache en tant que tel n'est pas complètement rempli. Dans d'autres variantes, les collisions de cache/page peuvent provoquer des expulsions. Enfin, dans les systèmes multiprocesseurs sous certaines charges de travail, migrations cachées (entre les caches des différentes UC) peut limiter l'utilité des caches CPU.

Questions connexes