3 Punkte von GN⁺ 2024-07-29 | Noch keine Kommentare. | Auf WhatsApp teilen

Zwei Threads, ein Kern: Wie Simultaneous Multithreading funktioniert

Hintergrund und Motivation
  • Warum SMT eingeführt wurde: SMT wurde eingeführt, um die Auslastung von Prozessorressourcen zu erhöhen. Ein Prozessor verfügt über Hunderte Register, mehrere Load/Store-Einheiten und arithmetische Einheiten. Um diese besser zu nutzen, kommen Techniken zur Instruktionsparallelität (ILP) zum Einsatz.
  • Instruction Pipelining: Die Ausführung von Instruktionen wird in mehrere Stufen unterteilt, sodass in jedem Zyklus neue Instruktionen zusätzlich verarbeitet werden können. Je tiefer die Pipeline, desto mehr Instruktionen lassen sich parallel verarbeiten.
  • Superskalare Architektur: In jedem Zyklus können mehrere Instruktionen ausgegeben werden. Moderne Intel Core i7-Prozessoren können beispielsweise pro Zyklus 4 Instruktionen ausgeben.
  • Horizontale und vertikale Verschwendung: Ressourcenverschwendung entsteht, wenn nicht genügend unabhängige Instruktionen gefunden werden. Horizontale Verschwendung tritt auf, wenn der Prozessor nicht genug unabhängige Instruktionen findet, vertikale Verschwendung dann, wenn alle Instruktionen von aktuell ausgeführten Instruktionen abhängen.
SMT-Implementierung in Intel-Prozessoren
  • Duplizierung des Architekturzustands: Um zwei Threads gleichzeitig auszuführen, wird der Architekturzustand des Prozessors dupliziert. Dadurch erscheint ein physischer Prozessor dem Betriebssystem als zwei logische Prozessoren.
  • Geteilte und duplizierte Ressourcen: Einige Ressourcen werden dupliziert, andere gemeinsam genutzt. Ob eine Ressource dupliziert wird, hängt von verschiedenen Faktoren ab, etwa Stromverbrauch und tatsächlicher Chipfläche.

Mikroarchitektur des Prozessors

  • Frontend, Backend und Retirement Unit: Die Mikroarchitektur des Prozessors ist in drei Teile gegliedert. Das Frontend holt und dekodiert Instruktionen, das Backend weist Ausführungsressourcen zu und führt Instruktionen aus. Die Retirement Unit übernimmt die Ergebnisse ausgeführter Instruktionen in den Architekturzustand.
Details der SMT-Implementierung
  • Frontend: Es besteht aus mehreren Komponenten wie Instruction Pointer, Trace Cache, ITLB-Cache und uop-Queue. Diese Komponenten werden für die Unterstützung von zwei logischen Prozessoren entweder dupliziert oder gemeinsam genutzt.
  • Backend: Es besteht aus Ressourcen-Allocator, Register Renaming, Instruction Ready Queue und Instruction Scheduler. Der Ressourcen-Allocator wechselt in jedem Zyklus zwischen den logischen Prozessoren.
  • Retirement Unit: Sie verfolgt, wann Instruktionen bereit sind, in den Architekturzustand übernommen zu werden, und übernimmt sie in der korrekten Reihenfolge.

Speicher-Subsystem

  • TLB: Ein kleiner Cache, der virtuelle Adressen in physische Adressen übersetzt. Er wird dynamisch zwischen den beiden logischen Prozessoren geteilt.
  • L1-, L2- und L3-Cache: Jeder CPU-Kern besitzt seinen eigenen L1-Cache. Der L2-Cache kann je nach Mikroarchitektur variieren, und der L3-Cache wird zwischen den Kernen gemeinsam genutzt.

Leistungsauswirkungen von SMT

  • Ausführung eines einzelnen Threads: Wenn ein einzelner Thread auf einem Kern mit aktiviertem SMT läuft, kann die Performance sinken, da Ressourcen geteilt werden.
  • Ausführung von zwei Threads: Die Performance kann je nach Cache-Zugriffsmuster variieren. Kooperierende Threads können die Performance verbessern, konkurrierende Threads sie hingegen verschlechtern.
  • Sicherheitslücken: In den letzten Jahren wurden Sicherheitsprobleme im Zusammenhang mit SMT entdeckt. Durch gemeinsam genutzte Ressourcen und spekulative Ausführung von Instruktionen könnten sensible Daten offengelegt werden.

Fazit

  • Entscheidung über den Einsatz von SMT: SMT wurde entwickelt, um die Auslastung von CPU-Ressourcen zu erhöhen und den Instruktionsdurchsatz zu steigern, bringt jedoch Trade-offs bei Performance und Sicherheit mit sich. Es ist wichtig, je nach Workload zu entscheiden, ob SMT verwendet werden soll.

Zusammenfassung von GN⁺

  • SMT verstehen: SMT wurde entwickelt, um die Auslastung von CPU-Ressourcen zu erhöhen und den Instruktionsdurchsatz zu steigern.
  • Performance und Sicherheit: SMT kann zur Leistungssteigerung beitragen, durch Ressourcenkonkurrenz und Sicherheitslücken aber auch zu Performance-Einbußen und Sicherheitsproblemen führen.
  • Einsatzentscheidung: Ob SMT verwendet werden soll, muss je nach Workload sorgfältig entschieden werden. Wenn maximale Performance erforderlich ist, kann es sinnvoll sein, SMT zu deaktivieren.
  • Verwandte Projekte: Auch Projekte zur SMT-Implementierung von AMD sowie zur Analyse der SMT-Performance von ARM-Prozessoren sind einen Blick wert.

Noch keine Kommentare.

Noch keine Kommentare.