AMD FX-8150 - Bulldozer im ausführlichen Test

Prozessoren | HT4U.net | Seite 10

Der Integer-Cluster


Handelt es sich bei dem MOP-Befehl um eine Integer- oder Speicher-Instruktion, so wird dieser von der Decode-Stufe an einen der beiden Integer-Cluster (von AMD auch gerne als "Kern" bezeichnet) übergeben. Die lediglich 2,37 mm² großen Cluster sind an einen Thread gebunden und müssen somit nicht geteilt werden.

Jeder der beiden Integer-Cluster in einem Bulldozer-Modul besitzt seinen eigenen Scheduler, der 40 Befehle (Integer oder Speicherzugriff) vorhalten kann und bis zu 4 Befehle pro Taktzyklus an die Ausführungseinheiten weiterleiten kann. Die zugehörigen Daten liegen in einem Physical Register File (PRF) mit 96 Einträgen. Der Vorteil eines PRFs ist, dass die Daten bzw. Operanden für jeden Befehl nur einmalig gespeichert werden müssen und nicht ständig mit der Instruktion von einer Einheit zur nächsten bewegt werden. Somit wird der Bedarf nach zusätzlichem Speicher reduziert und auch der Energieverbrauch sollte damit sinken. Auf das PRF wird dabei mit Hilfe von Pointern (Zeigern) zugegriffen.

Weiterhin ist in jedem Cluster eine 128 Einträge fassende Retire-Stufe und eine eigene Logik zur Registerumbenennung vorhanden. Die Retire-Stufe sorgt bei der Out-of-Order-Ausführung dafür, dass die Befehle schlussendlich doch in der richtigen Reihenfolge beendet werden.

Bild: AMD FX-8150 – Bulldozer im ausführlichen Test


Daneben gibt es pro Cluster zwei Arithmetisch-Logische-Ausführungseinheiten (ALU). Allerdings sind die beiden ALUs nicht komplett identisch, denn nur eine der beiden Einheiten unterstützt Multiplikationen und nur eine Divisionen. Darüber hinaus gibt es noch eine Lade- und Speichereinheit, die auf zwei Adressgenerierungseinheiten (AGen) zurückgreifen kann. Für entsprechende Befehle stehen ein Puffer mit 40 Einträgen für Lade- und 24 Einträge für Speicher-Operationen (beim Phenom II waren es insgesamt nur 44 Einträge) zur Verfügung. Laut den Spezifikationen erlaubt diese Einheit die Durchführung von zwei Lade- und einer Speicheroperation (je 128 Bit) pro Zyklus.

Da jedoch nur zwei AGens vorhanden sind, reduziert sich dies in der Praxis auf zwei parallele Speicherzugriffe. Ein aktueller Phenom II beinhaltet zum Vergleich pro Kern lediglich einen Puffer mit insgesamt 44 Einträgen und kann pro Kern zwei Lade- oder eine Speicheroperation pro Zyklus ausführen. Ein einzelner Integer-Cluster dürfte hier somit geringfügig performanter als ein Kern eines aktuellen Phenom II sein. Hinzu kommt, dass ein komplettes Bulldozer-Modul insgesamt vier Integer-ALUs und vier AGens besitzt, womit man jeweils um eine Einheit stärker aufgestellt ist als ein Phenom-II-Kern.

Der L1-Daten-Cache


Darüber hinaus verfügt jeder Integer-Cluster über einen 16 KByte (4-fach assoziativ) großen – oder besser kleinen – L1-Daten-Cache und einen 32 Einträge großen Translation Lookaside Buffer (TLB) – ein Puffer, der den Zusammenhang zwischen einer logischen und einer physikalischen Adresse speichert. Beides erscheint auf den ersten Blick etwas klein, zumal der L1-Daten-Cache auch den Floating-Point-Cluster versorgt. Offenbar ist sich AMD sicher, dass die Latenzen des L2-Caches gut hinter wartenden und ausführbereiten Instruktionen versteckt werden kann. Ob dies in der Praxis gelingt, gilt es herauszufinden. Zum Vergleich: Beim Phenom II war der L1-DTLB 48 Einträge groß und der L1-Daten-Cache fasste 64 KByte.

Der Vorteil des kleinen Caches könnte jedoch dessen Geschwindigkeit sein. Allerdings gibt AMD eine Load-Use-Latenz (also die Zeit vom Laden bis zum Nutzen der Daten) von 4 Takten an, was auch nicht schneller ist als bei wesentlich größeren L1-Caches. Ein Argument für den kleinen L1-Cache ist sicherlich die damit gesparte Die-Fläche. Immerhin gibt es bei den Topmodellen gleich acht dieser Caches und die Die-Größe liegt ohnehin schon bei 315 mm². Ob diese Rechnung aufgeht, ist jedoch fraglich, denn wenn Anwendungen zu sensibel auf den kleinen L1-Cache reagieren, kann es schnell zu großen Performance-Einbußen kommen. So etwas gab es schon einmal, nämlich bei Intels Pentium 4...


Der L2-Cache


Der L1-Daten-Cache ist im Übrigen ein Write-Through-Cache, d. h. Daten, die in den Cache geschrieben werden, werden direkt in den L2-Cache geschrieben. Dies verringert zwar Konsistenz-Probleme (Daten im L2 stimmen nicht mit jenen im L1 überein), kann jedoch auch zu Bandbreiten-Engpässen führen. Eine hohe Bandbreite bei Schreibzugriffen auf den L2-Cache ist daher Pflicht. Damit dieses Problem nicht zu großen Performance-Einbußen führt, hat AMD zwischen dem L1-Daten-Cache und dem L2-Cache noch einen 4 KByte großen "Write Coalescing Cache (WCC)" eingeführt, der die Schreibzugriffe puffert und dann in einem Rutsch an den L2-Cache weiterleitet.

Bild: AMD FX-8150 – Bulldozer im ausführlichen Test


Der L2-Cache misst pro Modul 2 MByte und ist 16-fach assoziativ. Seine Load-Use-Latenz ist mit 20 Zyklen angegeben, was unsere Messergebnisse bestätigen. Interessanterweise erwähnt AMD, dass der L2-Cache keine exakte Kopie des L1-Daten-Caches beinhaltet, trotz dessen Write-Through-Politik. Der L2-Cache ist also nicht vollständig inclusive. Ein Grund scheint zu sein, dass Daten, die nicht im L1-Daten-Cache und nicht im L2-Cache liegen, wohl aber im L3-Cache vorhanden sind, bei Bedarf nur im L1-Daten-Cache abgelegt werden. Dies ist z. B beim Prefetching, also dem vorsorglichen Laden von Daten, möglich. Dabei wird jedoch keine Kopie im L2-Cache abgespeichert. Dies bedeutet schlussendlich, dass im L1-Daten-Cache Daten liegen können, die nicht im L2-Cache enthalten sind. Werden diese Daten dann obendrein noch aus dem L3-Cache gelöscht, liegen diese folglich nur noch in dem einen L1-Daten-Cache, in dem sie zuvor abgelegt wurden.

Es kann also passieren, dass in jedem L1-Daten-Cache das gleiche Datum steht, aber in keinem L2-Cache und auch nicht im L3-Cache. Wenn nun das Datum in einem L1-Daten-Cache aktualisiert wird, landet es dank Write-Through zwar sofort im zugehörigen L2-Cache, doch alle anderen L1-Daten-Caches besitzen damit veraltete Daten. Um derartige Situationen zu erkennen "schnüffeln" (engl. snooping) die Cache-Controller ständig auf Veränderungen in allen L2-Caches. Dieser Snooping-Verkehr kann dabei durchaus störende Dimensionen annehmen, weshalb Intel beispielsweise seit einigen Generationen nur "Inclusive-Caches" einsetzt, bei denen die Daten der unteren Caches jeweils im nächst höheren gesichert sind.


 

Inhalt dieses Testberichtes