Gewinde (im Vergleich zu Kernen) und Nenn-CPU-Takt, was ist der Effekt?

1463
posfan12

Wenn meine CPU mit 2 GHz ausgelegt ist und über 4 Kerne verfügt, die 8 Threads unterstützen, laufen alle 8 Threads mit der Nenntaktrate? Oder laufen sie jeweils mit 1 GHz, da es doppelt so viele Threads wie Cores gibt?

0
Sie laufen mit 2 GHz Ramhound vor 7 Jahren 2

2 Antworten auf die Frage

5
Jamie Hanrahan

Erstens "haben" Kerne keine Threads. Ein Thread ist eine Eigenschaft eines Prozesses. Prozesse und Threads werden vom Betriebssystem erstellt, und die CPU hat eigentlich kein direktes Konzept. Werbetreibende, die behaupten, dass ihr Produkt "vier Kerne und acht Threads" hat, verwenden irreführende Begriffe.

Ihre Kerne haben entweder einen oder zwei logische Prozessoren . Für das Betriebssystem kann ein logischer Prozessor (LP) einen Thread ausführen . Sie haben einen LP pro Kern, wenn Sie das Hyperthreading in den Firmware-Einstellungen deaktiviert haben oder Ihre CPU HT nicht unterstützt. Zwei LPs pro Kern, wenn HT unterstützt wird. (Zukünftige x86 / x64-Prozessoren können mehr als zwei LPs pro Kern implementieren.)

Die Prozesse in einem typischen Windows-System können zu einem beliebigen Zeitpunkt insgesamt Hunderte bis Tausende von Threads enthalten. Sie können die Anzahl der Threads in jedem Prozess auf der Registerkarte "Details" des Task-Managers (in Windows 7 und früher als "Prozesse" bezeichnet) anzeigen. Aktivieren Sie einfach die Spalte "Threads".

Die überwiegende Mehrheit der Threads in den meisten Windows-Systemen "wartet" meistens auf etwas: Sie warten auf den Abschluss der E / As, sie warten auf den Ablauf der Zeitgeber und warten auf einen Seitenfehler gelöst werden. Wartende Threads - Unix und Linux verwenden den Begriff "blockiert" - versuchen nicht, die CPU-Zeit zu verwenden, und verwenden keine, bis das geschieht, worauf sie warten.

Die meisten Threads, die nicht warten, werden entweder "ausgeführt", was bedeutet, dass sie tatsächlich auf einem logischen Prozessor ausgeführt werden, oder "ready", was bedeutet, dass sie laufen würden, aber derzeit sind alle LPs mit anderen Threads beschäftigt. (Abgesehen von Ready, Running und Wait gibt es einige andere Zustände, die hier nicht von Interesse sind.)

Alles, was folgt, betrifft nur "laufende" Threads.

Wenn HT nicht aktiviert ist oder wenn HT aktiviert ist, die Anzahl der nicht wartenden Threads jedoch nicht höher als die Anzahl der Kerne ist, sollte die Leistung identisch sein, wenn HT deaktiviert ist. Die meisten modernen Betriebssysteme, einschließlich Windows, versuchen, nur einen LP pro Kern zu verwenden, bis mehr Threads als LPs vorhanden sind. Es würde (normalerweise) keinen Sinn machen, zwei Threads in die LPs eines Kerns einzusetzen, während beide LPs in einem anderen Kernleerlauf verbleiben. Betriebssysteme sind dabei nicht immer zu 100% erfolgreich, meistens jedoch recht gut.

Wenn zwei LPs in einem Kern beide Threads ausführen, ist die Summe der "Rechenarbeit" der beiden Threads wahrscheinlich etwas größer ... im Allgemeinen um 40 bis 60% ... als wenn Sie nur einen Kern hätten Das Betriebssystem schnitt zwischen den beiden Threads ab. Und die Gesamtarbeit wird sicherlich mit Sicherheit etwas geringer sein, als wenn jeder Thread auf einem eigenen Kern laufen würde.

Beachten Sie, dass ein Thread, der ausgeführt wird (sofern das Betriebssystem weiß), dennoch in seinem LP angehalten werden kann. Ein häufiger Fall ist der Fall, wenn der Thread auf den RAM zugegriffen hat, der sich noch nicht im CPU-L1-Cache befindet. Es dauert Zeit, die erforderlichen Daten aus dem Cache der äußeren Ebene oder aus dem RAM in den L1-Cache zu bringen. Während dieser Zeit macht der Thread möglicherweise keinen Fortschritt in seinem Befehlsstrom, aber Windows weiß das nicht. Die CPU-Firmware kann diese Zeit verwenden, um einige Arbeiten auf dem anderen LP im Core durchzuführen. Oder es führt möglicherweise zu einer Out-of-Order-Arbeit für den Thread, der auf den RAM-Inhalt wartet. Das Betriebssystem weiß nichts von solchen Dingen, meldet den Thread lediglich als "Running" und sammelt seine "CPU-Zeit", obwohl er möglicherweise während des "Stalls" keinen Fortschritt macht.

Also ... wir können zwei Threads gleichzeitig über Hyperthreading ausführen, einen auf jeder LP in einem Core. Dies bedeutet jedoch nicht, dass jeder Kern jetzt über zwei Rechenressourcen ("Ausführungseinheiten") verfügt, und dass die Taktrate zwischen den beiden LPs aufgeteilt wird.

Hyperthreading nutzt die Tatsache, dass die meisten Threads nicht immer alle Ausführungseinheiten eines Kerns voll ausnutzen. In der Tat ist diese Situation ziemlich selten ... Und deshalb kann HT so gut wie möglich sein. HT ermöglicht, dass ein zweiter Thread zur gleichen Zeit wie der erste im Prozessor vorhanden ist, und idealerweise kann dieser zweite Ausführungseinheit verwenden, die der erste nicht verwendet. Dies ist im Mikrocode der CPU implementiert.

Tatsächlich gibt es in der CPU-Firmware wirklich keinen Unterschied zwischen den "ersten" und "zweiten" Threads; es entscheidet sich nicht, einem mehr Aufmerksamkeit zu widmen als dem anderen. Die Firmware versucht nur, so viele Ausführungseinheiten der CPU wie möglich zu beschäftigen und so viel Arbeit wie möglich zu erledigen. Beim Hyperthreading gibt es einfach zwei Befehlsströme, an denen gleichzeitig gearbeitet werden kann, wodurch mehr von den Ausführungseinheiten der CPU verwendet werden.

Die CPU-Firmware ist sich nicht einmal wirklich bewusst, was das Betriebssystem als Threads oder "Thread-Kontextwechsel" betrachtet. Es weiß nur, dass es zwei verschiedene Befehlsströme hat, an denen gearbeitet werden kann, und jeder hat seinen eigenen Satz von Werten für Befehlszeiger, Stapelzeiger und viele der anderen Architekturregister. Und manchmal kommt das Betriebssystem aus Gründen, die der Firmware nicht bekannt sind, mit und ändert alles (ein Thread-Kontextwechsel).

Eine andere Sache, die HT nicht tut, ist die Implementierung eines Teils des Begriffs der Thread-Priorität des Betriebssystems. Wenn Sie also zwei Threads in den LPs eines einzigen HT-Kerns haben und das Betriebssystem der Meinung ist, dass diese Threads unterschiedliche Prioritäten haben, wird die HT-Firmware in der CPU dies nicht wissen. Insbesondere werden Ausführungseinheiten nicht bevorzugt dem Thread mit der höheren Priorität zugewiesen. Das Betriebssystem verwendet Thread-Prioritäten, um zu entscheiden, welche Threads auf welchen CPUs ausgeführt werden sollen.

Weitere Informationen zur Funktionsweise von Hyperthreading finden Sie in diesem Artikel bei Ars Technica. Leider erscheinen die Illustrationen nicht, da sie ihre Website neu erstellt haben - vielleicht würde eine E-Mail an sie das Problem beheben. Weitere Informationen dazu, wie Windows Threads "plant", finden Sie im Kapitel "Zeitplanung" von Windows Internals von Solomon, Russinovich et al .

-2
Muffin

Grundsätzlich betrachtet Ihr Betriebssystem Ihre Anzahl von Threads als die Anzahl der Kerne. Wenn ein Thread nicht voll ausgelastet ist, verwendet er den anderen Thread mehr und Ihr Computer ist schneller. (Meiner Ansicht nach)

Fügen Sie dieser Antwort möglicherweise einen Verweis hinzu, der Ihre Angaben stützt. Ich frage mich, seit Sie sagen *** Ich glaube ***, also war ich neugierig, ob dies eine Antwort oder eine Vermutung ist. Lesen Sie jedoch weiter ["Warum brauche ich 50 Reputation, um einen Kommentar abzugeben"] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can -i-do-stattdessen), um sicherzustellen, dass Sie verstehen, wie Sie mit dem Kommentieren beginnen können. Pimp Juice IT vor 7 Jahren 0