2013-02-08 8 views
5

Mein Verständnis ist, dass Hardware Prefetching nie Seitengrenzen überschreiten wird. Ich frage mich, ob ein Software-Prefetch die gleiche Einschränkung hat, d. H. Kann ich einen Software-Prefetch verwenden, um einen zukünftigen TLB-Fehler zu vermeiden. Aus der Suche heraus scheint es möglich zu sein, aber ich konnte nichts definitives in der Dokumentation finden, also wäre ein Hinweis gut.Software Vorabholung über Seitengrenze auf x86

Ich interessiere mich speziell für Nehalem, Sandy Bridge und Westmere.

+0

Update: IvyBridge führt HW-Prefetch über Seitengrenzen hinweg durch. https://stackoverflow.com/a/20758769/224132. Es ist ein neues Feature in IvB, und von anderen Dingen, die ich gelesen habe, denke ich, es ist richtig zu sagen, dass SnB und früher Intel nicht in die nächste Seite einlesen. Spekulative TLB-Ladevorgänge sind jedoch eine Sache, zumindest wenn sie durch spekulative Ausführung eines Lade-/Speicherbefehls ausgelöst werden. –

Antwort

2

Laut Intel Optimization Reference Manual, hängt es vom Prozessor ab. Aus Abschnitt 7.4.3:

Es gibt Fälle, in denen ein PREFETCH den Datenvorabruf nicht durchführt. Dazu gehören:

  • PREFETCH verursacht einen DTLB (Data Translation Lookaside Buffer) Fehlschlag. Dies gilt für Pentium 4 Prozessoren mit CPUID Signatur 15 an Familie entspricht, Modell 0, 1 oder 2. PREFETCH DTLB Misses löst und holt Daten auf Pentium 4 Prozessor mit CPUID Signatur Familie 15 entspricht, Modell 3.
  • Ein Zugriff auf die angegebene Adresse, die einen Fehler/eine Ausnahme verursacht.

Software Prefetching kann oder nicht TLB vermeiden verfehlt, abhängig von dem Prozessor. Es wird nicht die Daten abrufen, wenn es einen Seitenfehler verursachen würde.

Wenn Sie sicherstellen möchten, dass TLB-Fehler vermieden werden, können Sie einen Dummy-Lesevorgang ausführen, um die Daten anstelle eines Vorabrufbefehls zu laden. Dies könnte dazu führen, dass ein Seitenfehler auf einer Seite ausgetauscht wird, was je nach Anwendungsfall entweder gut oder schlecht sein kann.

+0

Die von OP erwähnten CPU-Familien sind keine CPUs der Pentium4-Klasse. – didierc

+0

@didierc Ich würde es nicht wissen, aber ich habe das direkt aus Intels Handbuch kopiert, und [wikipedia] (http://en.wikipedia.org/wiki/List_of_Intel_Pentium_4_microprocessors) listet alle außer Modell 0 als Pentium 4 auf. – ughoavgfhw

+0

Gut Zeiger. OP interessiert sich für die neuesten Generationen von ia64 CPU (Intel i5 & i7 Klasse, afaik). Ich habe nur versucht, dir dabei zu helfen, deine Antwort ein wenig herunterzuspielen. Mein schlechtes wenn es hart klang, es war nicht meine Absicht. – didierc

2

In modernen Prozessoren (Nehalem, Sandy Bridge und Westmere) löst Software-Prefetching tatsächlich eine TLB-Suche aus.

Von der Intel-Optimierung Leitfaden (Abschnitt 7.3.3)

In älteren Mikroarchitekturen, wodurch PREFETCH ein Data Translation Lookaside Buffer (DTLB) verpassen würde fallen gelassen werden. In Prozessoren basierend auf Nehalem, Westmere, Sandy Bridge und neueren Mikroarchitekturen, Intel Core 2-Prozessoren und Intel Atom-Prozessoren, PreFETCH verursacht ein DTLB Miss kann über eine Seitengrenze abgerufen werden.