Hyper-Threading im Detail

Hyper-Threading

Intel startet mit Hyper-Threading zunächst auf dem Xeon-Prozessor, der mit zwei logischen CPUs arbeitet.

Auf der Hardware-Seite lassen sich vier Gruppen in Abhängigkeit von der Nutzung durch die Threads unterscheiden:

  • 1. Ein Teil der Hardware liegt nur einfach vor. Hierzu zählen insbesondere die meisten Cache-Speicher und die einfach vorhandenen Ausführungseinheiten wie die Gleitkomma-Pipeline. Zugriffskonflikte auf diese Teile müssen auf Hardware-Ebene abgefangen werden. Der gemeinsame Zugriff auf den Daten-Cache erlaubt sowohl eine effiziente Nutzung der Hardware-Ressourcen als auch den schnellen Datenaustausch zwischen zwei Threads, wenn diese auf die gleichen Speicheradressen (Shared Memory) zugreifen.

  • 2. Ein Teil der Hardware liegt mehrfach vor und wird von den Threads parallel genutzt. Dies gilt vor allem für Ausführungseinheiten wie die Integer-Pipelines.

  • 3. Ein dritter Teil wird weiterhin nur einfach zur Verfügung gestellt und jeweils hälftig von den beiden aktiven Threads genutzt. Hierzu zählen die Warteschlangen (Decoupling Queue) zwischen Instruction Trace Cache und Renaming-Logik sowie zwischen Renaming-Logik und Scheduler. Weiterhin sind das die Load-and-Store-Buffer am L1-Cache sowie die Reorder-/Retire-Buffer.

  • 4. Und schließlich liegt ein Teil der Prozessor-Ressourcen in doppelter Ausführung vor. Dabei handelt es sich im Wesentlichen um die zentralen Zustands- und Datenregister (Architectural State - AS) und um den Interrupt Controller, der im Pentium 4 als Advanced Programmable Interrupt Controller (xAPIC) bezeichnet wird. Zum AS zählen insbesondere die für den Programmierer sichtbaren Daten-, Steuer-, Status-, Segment- und Debug-Register sowie Flags, Stack-Pointer und der Programmzähler (Instruction Pointer - IP).