2009-05-27 6 views

Antwort

10

Ja, Nehalem-based Prozessoren implementieren Hyper-threading.

Die neue Nehalem-EX, auf die Sie sich beziehen, hat 8 physikalische Kerne, wobei jeder Kern als 2 logische Kerne für insgesamt 16 logische Kerne angesehen werden kann, was die Ausführung von 16 Anwendungsthreads auf einem einzigen Prozessor ermöglicht.

Dies ist die gleiche Technologie, die in den Pentium 4-Prozessoren mit Hyper-Threading und in letzter Zeit auch bei den Atom-Prozessoren verwendet wird. Mein Eee PC hat einen Single-Core-Atom-Prozessor, der zwei logische Kerne hat - der Windows Task-Manager zeigt zwei CPU-Graphen; eine für jeden logischen Kern.

Sun UltraSPARC T2 (und die T1) auch für simultaneous multithreading (von denen Intels Implementierung heißt Hyper-Threading - eine Marke von Intel), die einen einzelnen Kern als mehrere logische Kerne erscheinen mehrere Threads auf einem einzigen ausgeführt werden können Ader.

Die grobe Idee hinter dem simultanen Multithreading besteht darin, mehrere Register zu haben, um den Prozessorzustand zu speichern. Es scheint also tatsächlich mehrere Kerne in einem einzigen Kern zu geben, da es mehrere vollständige Hardwareregister enthält.

Während die physischen Einrichtungen wie die ALU und FPU nicht erhöhen können, mehr Sätze von Registern mehr Threads auf einem physischen Kern ausführen können, um eine bessere Nutzung der verfügbaren Prozessorressourcen führen. Der Kern wurde möglicherweise bei der Ausführung eines einzelnen Threads nicht gesättigt, aber die Ausführung von multiple könnte alle Einheiten auf ihr vollstes Potenzial sättigen.

Was bedeutet es für Programmierer?

Es bedeutet, dass wir immer noch Multi-Threaded-Software schreiben müssen - mit einem Programm, das nur einen einzigen Thread hat nur in der Lage sein, einen einzigen logischen Kern zu verwenden. Nur durch einen gut geschriebenen Multithread-Code können wir die enorme Anzahl von logischen Kernen nutzen, die diese Prozessoren bieten.

auch bei gleichzeitigem Multithreading wird der Code an einem Thread pro logischem Kern ausgeführt.

1

Hyperthreading (übrigens das Markenzeichen von INTEL) ermöglicht, dass jeder Thread tatsächlich gleichzeitig läuft. In diesem Fall könnten Sie 8x2-Anwendungsthreads gleichzeitig ausführen.

Aus der Broschüre ...

Intel Nehalem Architektur High-k-Metall-Gate-Technologie Prozess gebaut einzigartigen 45nm

Up to **8 cores** per processor 
Up to **16 threads per processor** with Intel® Hyper-threading 
2.3 billion transistors 

dies auf Intels Vergleich zum Single-CPU muss Single-Core-Systeme, bei denen jeder Faden Geplant sein, und höchstens ein Thread ist aktiv - dieser eine laufende CPU-gebundene Task und die anderen warten auf eine E/A-Übertragung.

Ursprünglich Threading wurde entweder verwendet, um eine Reihe von gleichzeitigen Aktivitäten zu modellieren (nicht Modell nicht tatsächlich parallel ausgeführt) oder um das Erscheinungsbild eines Systems zu erzeugen, das auch während I/O reagierte. Zum Beispiel würde Ihr Textverarbeitungsprogramm ohne Threading beim Speichern eines Dokuments stehen bleiben.

Seit vielen Jahren widerstand ich der Idee, mehrere Threads in meinen Desktop-Anwendungen zu haben - es kompliziert den Code und potentiell reduzierte Leistung - denken Sie an all jene Mutex-Operationen, die den Betriebssystem-Kernel erfordern. Mit dem Aufkommen der tatsächlich parallelen Ausführung von Threads werden meine Einwände reduziert, aber ich glaube immer noch, dass mehrere Prozesse statt mehrerer Threads in einem einzigen Prozess ein besserer Ansatz sind.

Chris

+2

Meinst du 8 mal 16, wenn du 8X16 schreibst? Wenn dem so ist, würde ich annehmen, dass es, wie ältere HT-CPUs, zwei Threads pro Kern ist, d. H. Insgesamt 16 Threads, nicht 128. – OregonGhost

+1

Ja. Laut INTEL bedeutet das wirklich 16 Threads in jedem Kern. Um zu erreichen, dass sie sicherstellen müssen, dass viel Logik auf dem Würfel existiert. –

+2

Offensichtlich meinen sie das nicht. Sie haben das Teil selbst zitiert: 16 Threads pro ** Prozessor **. – MSalters

2

Es ist nicht Hyper-Threading umbenannt - es ist Hyper-Threading (es auf dieser Webseite geschrieben wird Ihnen Link gab).

einfach, Prozessor sagt Betriebssystem, das es 16 Kerne hat, so dass es Aufgaben auf verdoppelt Anzahl der Kerne ausgleichen kann. Hyper-Threading-Technologie bietet einige Vorteile, da in einigen Fällen zwei verschiedene Anweisungen von zwei verschiedenen Programmen/Threads gleichzeitig auf einem Kern ausgeführt werden können. Aber sicher wird es keine 200% Beschleunigung geben. Ich habe nicht an einem solchen Prozessor gearbeitet, aber ich denke, dass man etwa 10% -20% zusätzliche CPU-Zeit bekommen kann.

1

Es ist Sache des Threadingmodells jedes Betriebssystems, Threads der Betriebssystemebene den Threads auf Hardwareebene zuzuordnen, wie sie in der Frage beschrieben sind.

Die logischen Threads, die von höheren Programmiersprachen erzeugt werden, die von Anwendungsprogrammierern verwendet werden, sind immer noch eine Betriebssystemebene, die von der Hardware entfernt wird, es sei denn, Sie sprechen über den Betriebssystemcode, der das Mapping durchführt.

4

Ein extremes ein Multi-Threaded-Prozessor ist der Lauf-Prozessor. Dies ist eine Form von SMT, bei der der Prozessor Slots zwischen den mehreren Threads gleichmäßig in einer Round-Robin-Weise aufteilt. Um dies zu tun, benötigt es nur Kopien der verschiedenen Register, während der gleiche Satz von Ausführungseinheiten verwendet wird. In 4 Taktzyklen würde also Code aus Threads 0-3 in die Pipeline gestellt.

Sie können sich vorstellen, dass der Rest dieser Prozessoren mehr oder weniger ähnlich funktioniert. Anstatt Slots gleichmäßig zu verteilen, kann es nur leere Slots belegen, die aufgrund von Kontroll- oder Datengefahren im Prozessor leer sind.

Wenn beispielsweise eine Verzweigung erstellt wird, müssen möglicherweise Anweisungen in der Pipeline gelöscht werden. Anstatt alles komplett zu leeren, können einige der Slots für andere Threads verwendet werden. Die ganze Idee besteht darin, die Leistung zu verbessern, indem CPU-Zyklen nicht verschwendet werden.

So funktionieren mehrere Threads in Hardware.