Intels Pentium 4 Prescott im Detail

Neue Cache-Größen und -Features

Die ersten beiden Pentium-4-Generationen mit Willamette und Northwood-Core mussten mit lediglich 8 KByte vierfach-assoziativem L1-Cache für die Daten auskommen. Prescott erhält nun die doppelte Menge und kann auf 16 KByte exklusiven achtfach-assoziativen Daten-Cache mit einer sehr niedrigen Latenzzeit zugreifen. Interessant dabei ist, dass der Scheduler auf Grund der hohen Trefferrate immer davon ausgeht, dass benötigte Daten schon im L1-Cache liegen. Er schiebt daher Befehle in die Pipeline, ohne zu wissen, ob die nötigen Daten bis zur eigentlichen Ausführung überhaupt vorhanden sind. Muss die CPU die Daten aus dem langsamen L2-Cache oder gar dem Hauptspeicher holen, rechnet der Befehl in der Pipeline mit Dummy-Daten, um den Fluss nicht zu stören. Anschließend markiert er das Ergebnis als ungültig und ordnet sich zu einer erneuten Berechnung mit den inzwischen eingetroffenen richtigen Daten erneut in die Pipeline ein.

Eine ähnliche Data Speculation findet übrigens auch statt, wenn ein Befehl Daten benötigt, die ein Befehl vor ihm zwar eventuell schon berechnet, aber noch nicht in den L1-Cache zurückgeschrieben hat. Auch hier spart sich Intel die Zeit für einen vollständigen Adressenvergleich und reicht über das Store-to-Load-Forwarding eventuell passende Daten spekulativ weiter. Während der Befehl schon damit rechnet, vergleicht die CPU die Adressen vollständig. Hatte sie Pech, und es handelt sich doch um die falschen Daten, markiert sie die Ergebnisse des Befehls als ungültig und reiht den Befehl erneut in die Pipeline ein.

Der Trace-Cache für bereits dekodierte Befehle ist mit 12k µOps jedoch gleich geblieben. Laut Intel erreicht er eine Cache-Trefferrate, die der eines konventionellen Instruction-Cache mit 8 bis 16 KByte entspricht. Pro Takt kann der Trace-Cache drei µOps an die Pipelines liefern.

Der L2-Cache, der sowohl Daten als auch Code speichert, ist bei Prescott mit 1 MByte gegenüber dem Northwood-Core verdoppelt. Nur der Pentium 4 Extreme Edition, der intern auf Teilen des Northwood- und des Xeon-Gallatin-Cores basiert, hat mit 2 MByte noch mehr zu bieten.

Wie beim Northwood ist der L2-Cache des Prescott mit 256 Bit am Core angebunden und hat bei 3,4 GHz Takt eine Bandbreite von 108 GByte/s. Um allerdings die Taktfrequenz und damit die Bandbreite im nächsten Jahr nach oben treiben zu können, mussten die Core-Designer die Latenzzeit des Cache von 7 auf 18 Takte erhöhen. Dies frisst einen Teil der durch die Verdopplung erzielten Performance gleich wieder auf.

Durch einen Bauerntrick umgeht Intel jetzt das Cache-Trashing bei identischen, parallel ablaufenden Threads. Wie im Beitrag Hyper-Threading-Benchmarks erläutert, speichert der alte Pentium 4 Daten, die mit 64 KByte Abstand im Speicher liegen, in dieselbe Cacheline. Da typische Compiler den Stack bei parallel laufenden Threads um genau ein MByte (ein Vielfaches von 64 KByte) versetzen, werfen sich dadurch die Variablen ständig gegenseitig aus dem Cache (Cache Trashing). Statt schneller laufen Anwendungen mit identischen, parallel arbeitenden Threads durch Hyper-Threading somit langsamer. Als Lösung speichert der Prescott jetzt sechs Adressbits mehr im Cache. Die magische Blockgröße steigt somit auf vier MByte.

Zudem hat Intel noch ein Context Identifier Bit bei den L1-Cache-Tags eingeführt. Erkennt die CPU, dass die Threads der beiden logischen Prozessoren in unterschiedlichen Datenbereichen arbeiten, erhalten die Prozessoren unterschiedliche Context Identifier. Dadurch unterscheiden sich die Tag-Einträge im Cache, und das Trashing tritt prinzipiell nicht mehr auf.