2016-05-08 6 views
3

Ich möchte mein Programm zwingen, Cache L1 jedes Mal (oder fast jedes Mal) zu verpassen.Force zu L1 Cache-Miss

Also, meine IvyBridge hat 32 KB L1 Cache und es ist 8-Wege. Daher enthält jeder Satz 8 Zeilen und jede Zeile 64 Bytes. Die ersten 6 Bits der Adresszuordnung werden gesetzt, die letzte 7-Bit-Karte wird in der Zeile versetzt, und andere Bits bestimmen eine Markierung.

Wie wird der Cache übersehen? Soll ich 8 (jeder Satz hat 8 Zeilen) unterschiedliche Ladeoperationen aus dem gleichen Set verwenden?

+1

Dies ist nicht klar. Die einfachste Möglichkeit, einen Cache-Fehler zu vermeiden, besteht darin, eine Adresse zu laden, die sich gerade nicht im Cache befindet. –

+0

Übrigens sind L1 Cache-Zeilen 64 Bytes. –

+3

Warum versuchen Sie es zu tun? Was versuchst du zu erreichen? –

Antwort

4

Ja, Sie sind auf dem richtigen Weg. Wenn Sie Adressen verwenden, die alle im selben Satz enthalten sind, können Sie L1-Cache-Misses mit den wenigsten verschiedenen Adressen testen.

Allerdings sind 8 verschiedene Adressen offensichtlich nicht genug, da sie alle in einen Satz passen können. Am besten verdoppeln oder vervierfachen Sie es, damit der LRU Räumungsalgorithmus viele Chancen hat, eine Linie zu räumen, bevor Sie zu ihm zurückkehren.

Vorsicht vor TLB-Fehlern, wenn Sie zu viele verschiedene Adressen auf zu vielen Seiten verwenden. 2MB große Seiten können hier helfen.