Warum wird meine Dual-Core-CPU als Quad-Core-CPU erkannt?

52

Mein Prozessor ist ein Intel Core i3-380m . Wie Sie sehen können, sind es 2 Kerne und 4 Threads.

Obwohl sowohl Ubuntu 11.04 als auch Windows 7 den Eindruck erwecken, dass es sich um eine Quad-Core-CPU handelt:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Warum ist das? Liegt es daran, dass es 2 Threads pro Kern gibt, die die CPU in 4 Verarbeitungseinheiten aufteilen?

seriousdev
quelle

Antworten:

43

Wie bereits erwähnt, haben Sie ein Dual-Core-System mit 2 Threads pro Core.

Dies wird von Intel als Hyperthreading vermarktet und wurde im Laufe der Jahre auf verschiedene Arten von verschiedenen Herstellern durchgeführt.

Um es in seiner einfachsten Form zu erklären, besteht jeder CPU-Kern aus einem "Kern" und verschiedenen Architekturen um diesen Kern, die Status- und Prozessinformationen für jeden Thread speichern. Ein einzelner Thread-Kern verfügt über die Architektur, um die Zustandsinformationen eines Threads gleichzeitig zu speichern. Ein Hyperthread-Kern speichert zwei unterschiedliche Sätze von Zustandsinformationen, sodass zwei separate Prozesse gleichzeitig ausgeführt werden können, solange sie verschiedene Teile des Kerns erfordern ( Dies ist wahrscheinlich, da der Kern aus mehreren Einheiten verschiedener Verarbeitungseinheiten besteht.

Um die Sichtweise der CPU auf das System zu vereinfachen, wird jeder Hyperthread als separate CPU angesehen, sodass ein Dual-Core-Prozessor mit zwei Threads pro Core als Quad-Core-Prozessor angezeigt wird.

Es ist auch möglich, dass das Betriebssystem Core-Parking verwendet (eine Funktion in neueren Intel-Prozessoren), wodurch das Betriebssystem die Hälfte eines Hyperthread-Kerns aussetzen kann, sodass die Leistung eines einzelnen Threads dann nicht benötigt wird, wenn die zusätzliche Verarbeitungsfähigkeit des Hyperthreads nicht erforderlich ist wird erhöht, da der Core seinen Cache nicht mehr auf 2 Threads verteilt und den Cache auf dem Core nun vollständig einem einzelnen Thread zuweisen kann.

Mokubai
quelle
Danke für die Erklärung. Können wir hier also sagen, dass ein Thread zu einem Kern gehört, wie ein Kern zu einem Prozessor?
Seriousdev
2
In gewisser Weise ja. Das Betriebssystem erkennt den Prozessor, weiß, wie viele Kerne sich auf diesem Prozessor befinden und wie viele Threads jeder Kern unterstützt. Die angezeigte CPU-Auslastung ist nun "pro Thread" und nicht mehr "pro Kern". Es ist nicht ganz so einfach (da jeder Thread einem nicht hyperthreading-fähigen Betriebssystem tatsächlich als vollwertiger CPU-Kern erscheint), aber das ist die allgemeine Idee davon.
Mokubai
@ Mokubai Core-Parking-Link funktioniert nicht.
Biswapriyo
49

Der Grund ist Hyperthreading , das Ihr Prozessor unterstützt. Hyperthreading ist nicht das Äquivalent eines zusätzlichen Prozessors, kann jedoch die Leistung bei Multithread-Anwendungen erheblich steigern. Für jeden physisch vorhandenen Prozessorkern adressiert das Betriebssystem zwei virtuelle Prozessoren und teilt die Arbeitslast nach Möglichkeit auf diese auf.

Keltari
quelle
7
Ist dies als physikalische vs logische Kerne bekannt?
Xdumaine
11
Ja, ein physischer Kern ist - na ja ... physisch. Du kannst es anfassen. Hyperthreaded-Kerne sind nicht real, daher logisch. Sie können physische Kerne auch durch Virtualisierung in logische Kerne aufteilen.
Keltari
3
@Keltari hat tatsächlich einen physischen Teil ... Hyperthreading ist eine Hardwarekomponente in einem CPU-Kern (und kann nur auf Hardwareebene deaktiviert werden). Weitere Informationen finden Sie in diesem Intel Whitepaper . Grundsätzlich werden die Ressourcen eines Kerns auf zwei physische Ausführungseinheiten aufgeteilt. Technisch gesehen sind beide Kerne, die vom Betriebssystem in einem Hyperthread-Kern erkannt werden, "logisch", es gibt weder einen physischen noch einen logischen.
Durchbruch
1
Zwar ist Hyperthreading ein physischer Teil des Prozessors, aber kein physischer Kern.
Keltari
1
Die beste Art, an HT zu denken, ist, dass es mit seinem Bruder viel mehr Ressourcen teilt als die einzelnen Kerne. Es ist jedoch in der Lage, einen Thread "allein" auszuführen, und das Betriebssystem behandelt ihn als Thread-Ausführungseinheit (die Sie einem Kern zugeordnet haben).
Crasic
12

Die Dinge sind viel komplexer als zu Zeiten eines CPU-Befehls pro Taktzyklus.

Es gibt jetzt eine Pipeline für jede Anweisung, die aus mehreren Schritten besteht. Ich habe bis zu 41 gehört, obwohl das vor einer Weile war und ich habe keine Ahnung, wie aktuelle CPU-Pipelines aussehen. Ich weiß, dass Sie, wenn die Pipeline lang genug ist, einen neuen Befehl in der Pipeline beginnen können, bevor der letzte Befehl abgeschlossen ist, manchmal im selben Taktzyklus, sodass Ihr einzelner Kern effektiv zwei Dinge gleichzeitig ausführt.

Hier gibt es jedoch einen Trick. Sie können dies nicht nur verwenden, um die Geschwindigkeit zu beschleunigen, mit der Ihr Prozessor Anweisungen aus einem bestimmten Programm abbaut. Es liegt ein Korrektheitsproblem vor: Die nächste Anweisung kann vom noch unbestimmten Ergebnis der vorherigen Anweisung abhängen. Um die Vorteile der langen Pipeline sicher zu nutzen , präsentiert der Chip dem Betriebssystem-Scheduler zwei separate Prozessorkerne und alternative Anweisungen, die an jeden Kern gesendet werden, so dass sich nie zwei Anweisungen an denselben "Kern" gleichzeitig in der Pipeline befinden. Auf diese Weise können wir sicher sein, dass sich gleichzeitig ausgeführte Anweisungen nicht gegenseitig stören. Dies wird als Hyperthreading bezeichnet .

Es ist erwähnenswert, dass Hyperthreading zwar die Menge an Arbeit, die Sie aus Ihrer CPU herausholen, erheblich erhöhen kann, aber bei weitem nicht so gut ist, wie dass es so viele physische Kerne gibt. Abhängig von Ihrer Arbeitsbelastung bedeutet dies möglicherweise nur eine geringe Verbesserung um 15% oder sogar eine Verbesserung um 40%. Unter bestimmten Umständen möchten Sie die Funktion möglicherweise sogar deaktivieren, damit die verbleibenden Kerne den vollständigen exklusiven Zugriff auf den L1 / L2-Cache für diesen Kern haben (dies wird manchmal mit dedizierten Datenbankservern durchgeführt).

Wenn Ihr Chip 2 Kerne mit 4 Threads anzeigt, bedeutet dies, dass es sich um einen Dual-Core-Prozessor handelt, der Hyperthreading unterstützt.

Joel Coehoorn
quelle
2

Schauen Sie sich diese Intel-Seite an - sie enthält viele Animationen, die zeigen, wie Hyperthreading Ihre Aufgaben beschleunigt.

Das Utilization of Processor Resourcesist die beste Animation, schaut sie euch an und klickt auf den "Weiter" -Button.

woliveirajr
quelle
1

Warum ist das? Liegt es daran, dass es 2 Threads pro Kern gibt, die die CPU in 4 Verarbeitungseinheiten aufteilen?

Einfach ausgedrückt lautet die Antwort ja. Jeder Kern Ihrer CPU kann zwei unabhängige Threads unterstützen, also insgesamt 4. Dies bedeutet jedoch nicht, dass es die gleiche Leistung wie eine Quad-Core-Single-Threaded-CPU hat. Praktisch ist die Leistung einer Dual-Core-CPU mit zwei Threads niedriger als die einer Quad-Core-CPU mit einem Thread. Wie der AMD Phenom X4.

aminfar
quelle
Wissen Sie, warum?
Seriousdev
1
Der Grund ist, dass in einem Double-Threaded-Kern die Hardwareressourcen (wie der Neuordnungspuffer) von zwei Threads gemeinsam genutzt werden, während in einer Single-Threaded-CPU alle Ressourcen einem Kern zugeordnet sind. Erwähnenswert ist, dass ein Multithread-Kern die Hardwareauslastung und den Durchsatz erhöht, die Latenz jedoch beeinträchtigt. Es gibt viele Kompromisse. Das Wort "Leistung" ist hier also wirklich vage. Für gewöhnliche Menschen bedeutet dies die Latenz eines einzelnen Threads.
Aminfar