Ui, da hast du dir ja eine Frage ausgedacht
Um Hyper-Threading komplett zu verstehen, müsstest du ungefähr 4 verschiedene Informatik-Module studieren ...
Entsprechend schwierig ist es, das jetzt hier zusammenzufassen.
Die Grundidee ist es, das Problem auszunutzen, dass man es nach wie vor nicht schafft, ein perfektes CPU-Scheduling zu entwickeln.
Da beginnt auch direkt das erste Problem von HT, nämlich dass es wirkungsloser wird, je besser der Betriebssystemkern ist. Deswegen ist Hyper-Threading zum Beispiel bei Linux häufig keine gute Idee, da dessen Kernel in Bezug auf Scheduling-Strategien um Generationen vor dem von Windows liegt (auf Apple gehe ich jetzt mal nicht ein, dessen entfernte Verwandtschaft zu Linux verkompliziert das Thema).
Die Grundidee ist also, bei einem schlecht performanden Betriebssystem dessen "Fehler" auszunutzen. Solche Fehler sind (auf der niedrigsten Ebene) eine schlechte Verteilung der abzuarbeitenden Aufgaben an die Prozessorkerne (wobei hier auch wiederum die höheren Softwareebenen Einfluss haben) und vor allem ein schlechtes Speichermanagement.
Um das nun zu verstehen, müssen wir einen kurzen Blick auf Speicher im Computer allgemein werfen:
Der tatsächlich "rechnende" Teil im Prozessor ist die sogenannte Arithmetisch-Logische Einheit (arithmetic logic unit), kurz ALU. Diese kann aller-simpelste Berechnungen durchführen, wie Additionen (arithmetic), Negation und Konjunktion (logic). Falls du bereits etwas über diskrete Mathematik weist, so fällt dir gleich auf, dass diese ein funktional vollständiges System bilden, was bedeutet dass sich daraus jede beliebige mathematische Operation herleiten lässt. Dies passiert mittlerweile auch direkt in der ALU, üblicherweise kann die ALU auch direkt subtrahieren, dividieren (mit Ausnahme von Intel
), vergleichen, und einige Sachen wie zB Bitshifts durchführen.
Nun erinnern wir uns mal an unsere Grundschulzeit im Mathe-Unterricht: Das schwierigste beim Kopfrechnen ist es, sich seine vorherigen Ergebnisse zu merken.
Das Problem hat auch die ALU, deshalb braucht ein Prozessor Speicher. In erster Linie kommen da ihr Register, danach (mittlerweile 3 Level) Cache-Speicher, welche direkt mit auf der Prozessorplatine verbaut sind, danach kommt der Arbeitsspeicher und schlussendlich nicht-flüchtiger Speicher in Form von Laufwerken (welcher aber nur im allerschlimmsten Fall für aktuelle Rechnungen genutzt wird).
Da die ALUs mittlerweile extrem schnell rechnen können, brauchen sie einen entsprechend schnellen Speicher. Die Register arbeiten mittlerweile im Bereich von unter einer Zehntel-Nanosekunde, die Level 1 und 2 Caches im einstelligen Nanosekundenbereich.
So schneller Speicher ist entsprechend teuer und schwierig zu bauen, weshalb er nur sehr klein ist. Es lässt sich sagen, dass Speicher, je weiter er von der ALU entfernt ist, exponentiell langsamer, größer und billiger wird.
Folglich hat man also das Problem, dass man diesen Speicher effizient nutzen muss, und hier kommen wir langsam zurück auf unser Thema.
Die Verwaltung dieses Speichers ist eine der grundlegenden Aufgaben des Betriebssystems, und es gibt eine recht komplexe Wissenschaft, die versucht diese Nutzung zu optimieren.
Das Ziel ist dabei, dass die ALU immer genau das zur Verfügung stehen hat, was sie in dem Moment braucht, da sie ansonsten eine Pause machen muss um auf die richten Daten im Speicher zu warten. Dazu kommt, dass der Wechsel von Daten zwischen den Speicherebenen jeweils etwas Zeit braucht und gut geplant werden muss.
Da es praktisch nicht möglich ist, einen perfekten Algorithmus für diese Verwaltung zu schreiben und verschiedene Betriebssystem bisher unterschiedlich viel Erfolg hatten, ist Intel auf die Idee gekommen, dass es einfach zu jeder ALU zwei Speichersysteme gibt, die als separate Threads behandelt werden. Und immer, wenn der eine gerade wegen eines Performance-Fehlers eine kurze Pause machen muss, da sein Speicher nicht bereit ist, schaltet eine zusätzliche Steuereinheit die ALU auf den anderen Speicher-Satz um.
Da sehen wir auch gleich, warum Hyper-Threading nie wirklich so funtkioniert wie zwei Kerne: Es kann immer nur einer der beiden Threads arbeiten, und nur eventuelle Wartezeiten der ALU kann man dadurch verkleinern.
Jetztendlich wird also, logisch betrachtet, der eine Kern besser ausgenutzt, indem man dem Betriebssystem vorgaukelt, es wären zwei.
Man könnte das jetzt noch endlos vertiefen ... aber ich glaube, für einen Anfänger in dem Thema war das schon so sehr erschlagend
Ich hoffe, es hat dir trotzdem ein wenig geholfen
Einen kleinen Nachtrag kann ich mir doch nicht verkneifen:
Der Unterschied zu AMDs Modul-Technologie, und weshalb man diese (im gegensatz zu Intel) beinahe als separate Kerne ernst nehmen kann:
Bei AMD wird nicht nur der Speicher mehrfach verbaut, sonder auch Teile der ALU gibt es doppelt. Der tatsächliche Kern sieht also (makaber gesagt) aus, wie ein siamesischer Zwilling, es gibt einige Dinge wirklich zweimal, ein paar andere "Abteilungen" , von denen AMD der Meinung ist, dass sie meist weniger stark ausgelastet werden, sind nur einmal vorhanden.
PCGH hat da mal einen schönen Test gemacht:
http://www.pcgameshardware.de/CPU-Hardware-154106/Specials/CPU-Multitasking-Test-1075340/
Hier sieht man recht gut, wie Intels CPUs viel Leistung haben, aber sobald mehr als die Hälfte der Kerne voll belastet wird, bricht der Performance-Zuwachs pro Kern stark ein. Bei AMD liegt er weiterhin fast auf dem Niveau von echten Kernen.
Man sieht auch, dass SMT doch einiges bringt, aber den Effekt nicht neutralisieren kann.
Wo wir beim Thema sind: Ich habe seit einer Woche einen wunderschönen FX 8350 auf dem Schreibtisch liegen ... aber ich will meinen X6 nicht rausschmeißen
Ein echter Hexacore ist doch irgendwie was besonderes ...