Hyperthreading ist eine billigere und langsamere Alternative zu Dual-Cores
Das Intel Manual Volume 3 Systemprogrammierungshandbuch - 325384-056DE September 2015 8.7 "INTEL HYPER-THREADING TECHNOLOGY ARCHITECTURE" beschreibt HT kurz. Es enthält das folgende Diagramm:
TODO ist es langsamer, um wie viel Prozent im Durchschnitt in realen Anwendungen?
Hyperthreading ist möglich, weil moderne Einzel-CPU-Kerne bereits mehrere Anweisungen gleichzeitig mit der Anweisungs-Pipeline https://en.wikipedia.org/wiki/Instruction_pipelining ausführen
Die Anweisungspipeline ist eine Trennung von Funktionen innerhalb eines einzelnen Kerns, um sicherzustellen, dass jeder Teil der Schaltung zu einem bestimmten Zeitpunkt verwendet wird: Lesen des Speichers, Decodieren von Anweisungen, Ausführen von Anweisungen usw.
Hyperthreading trennt Funktionen weiter, indem Folgendes verwendet wird:
ein einzelnes Backend, das die Anweisungen mit seiner Pipeline ausführt.
Dual Core hat zwei Backends, was die höheren Kosten und die höhere Leistung erklärt.
Zwei Front-Ends, die zwei Anweisungsfolgen aufnehmen und so anordnen, dass die Pipeline-Nutzung des einzelnen Back-Ends maximiert wird, indem Gefahren vermieden werden .
Dual Core hätte auch 2 Frontends, eines für jedes Backend.
Es gibt Randfälle, in denen die Neuordnung von Befehlen keinen Nutzen bringt und Hyperthreading unbrauchbar macht. Aber es ergibt sich eine deutliche Verbesserung im Durchschnitt.
Zwei Hyperthreads in einem Kern teilen sich weitere Cache-Ebenen (TODO, wie viele? L1?) Als zwei verschiedene Kerne, die nur L3 gemeinsam haben.
Die Schnittstelle, die jeder Hyperthread dem Betriebssystem zur Verfügung stellt, ähnelt der eines tatsächlichen Kerns, und beide können separat gesteuert werden. So cat /proc/cpuinfo
zeigt mir 4 Prozessoren, obwohl ich nur 2 Kerne mit je 2 Hyperthreads habe.
Betriebssysteme können jedoch den Vorteil nutzen, zu wissen, welche Hyperthreads sich auf demselben Kern befinden, um mehrere Threads eines bestimmten Programms auf einem einzelnen Kern auszuführen, was die Cache-Nutzung verbessern kann.
Dieses LinusTechTips-Video enthält eine unbeschwerte, nicht technische Erklärung: https://www.youtube.com/watch?v=wnS50lJicXc