Was ist ein CPU-thread und wie ist das mit dem logischen threads im code?
Ich gesehen habe in der Literatur für einige der neueren CPU ' s wie der Intel Xeon "Nehalem-EX" als mit 8 Kernen und 16 threads. Was reden Sie hier? Ich sah Erwähnung von diesem in Bezug, so SPARCS zu, doch dies ist nicht die Art von logischen threads hervorgebracht von code ? Ist dieses hyperthreading neu benannt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Nehalem-basierten Prozessoren implementieren Hyper-threading.
Den neuen Nehalem-EX die Sie sich beziehen, hat 8 physikalische Kerne, wobei jeder Kern kann man sich als 2 logische Kerne für insgesamt 16 logischen Kernen, die für die Ausführung von 16 Anwendungs-threads auf einem einzelnen Prozessor.
Dies ist die gleiche Technologie, die in der Hyper-threading-fähigen Pentium-4-Prozessoren, und mehr kürzlich, auf der Atom-Prozessoren. Mein Eee-PC hat einen single-core-Atom-Prozessor, die zwei logische Kerne -- der Windows-Task-Manager zwei CPU-Diagramme; eine für jeden logischen Kern.
Sonne UltraSPARC T2 (und T1) erlauben auch für gleichzeitige multithreading (von denen die Intel ' s Implementierung ist unter dem Namen Hyper-Threading-eine Marke von Intel) die es ermöglicht eine single-core-zu erscheinen, als mehrere logische Kerne zur Ausführung von mehreren threads auf einem single-core.
Die grobe Idee hinter gleichzeitige multithreading haben mehrere Register, die zum speichern der Prozessor-Zustand, so scheint es, dass es tatsächlich mehrere Kerne in einem einzigen Kern, denn es hat mehrere vollständige sets von hardware-Registern.
Während die physischen Einrichtungen, wie der ALU und der FPU nicht erhöhen, nachdem mehrere Sätze von Registern ausführen mehrerer threads auf einem physikalischen Kern sorgen für eine bessere Auslastung der verfügbaren Prozessor-Ressourcen. Der Kern wurde nicht gesättigt, wenn die Ausführung eines einzelnen Threads, sondern die Ausführung mehrerer könnte zu sättigen, alle Einheiten zu seinem vollsten Potenzial.
Also, was bedeutet es für Programmierer?
Bedeutet es, dass wir noch schreiben müssen, multi-threaded-software-Programm, das nur aus einem einzigen thread wird nur in der Lage sein zu nutzen eine einzige logische Kern. Nur durch gut geschriebene Multithread-code sind wir in der Lage, um die Vorteile der massiven Anzahl der logischen Prozessoren diese Prozessoren bieten.
Sogar mit simultanem Multi-Threading, wird der code ausgeführt, bei einem thread pro logischem Kern.
Extreme von multi-threaded-Prozessor ist der barrel-Prozessor. Dies ist eine form von SMT, in der der Prozessor teilt Schlitze zwischen mehreren threads gleich in einer round-robin-Weise. Um dies zu tun, es muss nur Kopien der verschiedenen Register unter Verwendung der gleichen Reihe von execution units. So, in 4 Taktzyklen es würde code von Threads 0-3 in der pipeline.
Kann man sich den rest dieser Prozessoren arbeiten in einer ähnlichen Weise, um eine mehr oder weniger stark. Statt der Verteilung von slots um gleich, es kann nur bis slots sind leer, da entweder für die Steuerung oder Daten, die Gefahren in den Prozessor.
Zum Beispiel, wenn ein Zweig genommen, die Instruktionen in die pipeline geleert werden müssen. Statt völlig Spülung alles, einige der slots kann verwendet werden, für die anderen threads. Die ganze Idee ist, um die Leistung zu verbessern, indem nicht Verschwendung von CPU-Zyklen.
Das ist, wie mehrere threads arbeiten, in der hardware.
Es ist nicht hyper-threading-umbenannt - es ist hyper-threading (es steht auf dieser Webseite, die Sie gab link).
Einfach, Prozessor sagt OS, es hat 16 Kerne, so kann es die balance Aufgaben auf verdoppelt die Anzahl der Kerne. Hyper-threading-Technologie geben einige Vorteile, denn in einigen Fällen zwei verschiedene Anweisungen von zwei unterschiedlichen Programmen/threads ausgeführt werden können auf einem Kern gleichzeitig. Aber es wird sicher nicht geben 200% beschleunigen. Ich habe nicht einen solchen Prozessor, aber ich denke, dass kann man etwa 10%-20% zusätzliche cpu-Zeit.
Jedes Betriebssystem threading-Modell, um anzeigen OS-level-threads auf hardware-level-threads wie den beschriebenen in Frage.
Den logischen threads hervorgebracht von high-level-Programmiersprachen von Anwendungen verwendet, die Programmierer sind immer noch ein OS-level entfernt-von der hardware, es sei denn, natürlich, Sie sprechen über die OS-code, der die Zuordnung.
Hyperthreading (INTEL-Marke übrigens) ermöglicht es jeden thread tatsächlich gleichzeitig ausgeführt werden. So in diesem Fall könnten Sie ausführen, 8X2 Anwendungs-threads an der gleichen Zeit.
Aus der Broschüre ...
Intel Nehalem-Architektur baut auf Intels aktuelle 45 Nm high-k-metal-gate-Technologie-Prozess
Vergleichen Sie dies mit single-CPU, single-core-Systeme, in denen jeder thread muss geplant werden und bei den meisten nur ein thread aktiv sein wird -, dass eine CPU-gebundene Aufgabe und die anderen warten auf eine I/O-transfer.
Ursprünglich threading verwendet wurde, entweder Modell eine Reihe von gleichzeitigen Aktivitäten (nicht Modell eigentlich nicht parallel laufen) oder zu produzieren das Aussehen von einem system, das reagiert, auch während Sie I/O. Zum Beispiel ohne threading, Ihre word-Prozessor erscheinen würde, um stall beim speichern einer doc.
Seit vielen Jahren hatte ich die Idee, dass mehrere threads in meinem desktop-Anwendungen - ist es kompliziert den code und potenziell reduzierter Leistung - denke an all die mutex-Operationen, bei denen der OS-kernel zu engagieren. Mit dem Aufkommen der tatsächlich parallele Ausführung von threads, meine Einwände sind reduziert, aber ich glaube immer noch, dass mehrere Prozesse statt mehrere threads in einem einzelnen Prozess ist ein besserer Ansatz.
Chris