Multithread-Ausführung auf der CPU: Funktionsweise

Wenn wir von Prozessoren für PCs Es ist sehr üblich, über die Anzahl der Kerne und die Verarbeitungs- oder Ausführungsthreads zu sprechen, die im Allgemeinen doppelt so groß sind wie die Anzahl der Kerne, weil HyperThreading Technologien im Fall von Intel und SMT in dem Fall of AMD Was sie tun, ist, dass jeder Kern zwei gleichzeitige Aufgaben ausführen kann. Dies ist jedoch eine ziemlich einfache Methode, um zu erklären, wie Multithreading funktioniert Auf einem Prozessor und in diesem Artikel erklären wir es Ihnen ausführlicher, damit Sie alle Vor- und Nachteile verstehen können.

Wir alle wissen jedoch, dass ein Prozessor mit mehr Threads als Kernen mehr Aufgaben gleichzeitig ausführen kann. Tatsächlich erkennt das Betriebssystem den Prozessor so, als ob er tatsächlich so viele Kerne hätte, wie es Threads gab. Beispielsweise verfügt ein Intel Core i7-8700K dank der HyperThreading-Technologie über 6 Kerne und 12 Threads Windows 10 erkennt es als einen 12-Kern-Prozessor wie er ist (obwohl es wahr ist, dass er sie "logische Prozessoren" nennt), weil für das Betriebssystem seine Funktionsweise vollständig transparent ist.

Multithread-Ausführung auf der CPU

Was ist Multithread-Verarbeitung?

In der Computerarchitektur ist die Multithread-Verarbeitung die Fähigkeit der Zentraleinheit (CPU), um mehrere Ausführungsthreads gleichzeitig bereitzustellen, die vom Betriebssystem unterstützt werden. Dieser Ansatz unterscheidet sich von der Mehrfachverarbeitung und sollte nicht verwechselt werden. In einer Multithread-Anwendung teilen sich Threads die Ressourcen eines oder mehrerer Prozessorkerne, einschließlich Recheneinheiten, Cache und TLBL (Translation Search Buffer).

Multiproceso vs Multi Hilo

Wenn Multiprocessing-Systeme mehrere vollständige Verarbeitungseinheiten auf einem oder mehreren Kernen enthalten, zielt die Multiprocessing-Methode darauf ab, die Auslastung eines einzelnen Kerns durch Verwendung von Parallelität auf Thread-Ebene sowie Parallelität auf Befehlsebene zu erhöhen. Da sich die beiden Techniken ergänzen, werden sie in fast allen modernen Systemarchitekturen mit mehreren Multithread-CPUs und mit Multi-Core-CPUs kombiniert, die mit mehreren Threads arbeiten können.

Das Multithread-Paradigma ist populärer geworden, als die Bemühungen, die Parallelität auf Befehlsebene auszunutzen (dh mehrere Befehle parallel ausführen zu können), Ende der neunziger Jahre ins Stocken gerieten. Dies ermöglichte es, dass das Konzept des Performance Computing aus dem spezialisierteren Bereich der Transaktionsverarbeitung hervorging.

Obwohl es sehr schwierig ist, einen einzelnen Thread oder ein einzelnes Programm weiter zu beschleunigen, führen die meisten Computersysteme tatsächlich Multitasking zwischen mehreren Threads oder Programmen durch, und daher führen Techniken, die die Leistung aller Aufgaben verbessern, zu Leistungssteigerungen. Allgemeines. Mit anderen Worten, je mehr Anweisungen eine CPU gleichzeitig verarbeiten kann, desto besser ist die Gesamtleistung des gesamten Systems.

Auch die Multithread-Verarbeitung hat Nachteile

Neben Leistungssteigerungen besteht einer der Vorteile der Multithread-Verarbeitung darin, dass die anderen Threads bei Verwendung vieler Cache-Fehler weiterhin nicht verwendete CPU-Ressourcen nutzen können, was zu einer schnelleren Gesamtausführung führen kann. da diese Ressourcen inaktiv gewesen wären, wenn nur ein einziger Thread ausgeführt worden wäre. Wenn ein Thread nicht alle CPU-Ressourcen verwenden kann (z. B. weil die Anweisungen vom Ergebnis des vorherigen abhängen), kann das Ausführen eines anderen Threads verhindern, dass diese Ressourcen inaktiv werden.

CPU Reverso-Rendering

Alles hat aber auch seine negative Seite. Mehrere Threads können sich gegenseitig stören, indem sie Hardwareressourcen wie Cache- oder Übersetzungssuchpuffer gemeinsam nutzen. Infolgedessen werden die Ausführungszeiten für einzelne Threads nicht verbessert und können sich aufgrund niedrigerer Frequenzen oder zusätzlicher Pipeline-Stufen, die für die Unterbringung von Prozessvermittlungshardware erforderlich sind, verschlechtern, selbst wenn nur ein Thread ausgeführt wird.

Die Gesamteffizienz variiert. Laut Intel verbessert die HyperThreading-Technologie diese um 30%, während ein synthetisches Programm, das nur einen Zyklus nicht optimierter, abhängiger Gleitkommaoperationen ausführt, bei paralleler Ausführung tatsächlich eine 100% ige Verbesserung erhält. Auf der anderen Seite leiden handgestimmte Assembler-Programme, die MMX- oder AltiVec-Erweiterungen verwenden und vorab nach Daten suchen (z. B. ein Video-Encoder), nicht unter Cache-Lecks oder inaktiven Ressourcen, sodass sie überhaupt nicht von einem Lauf profitieren . Multithreading und kann tatsächlich zu einer Verschlechterung der Leistung aufgrund von Share-Konflikten führen.

Aus Softwaresicht ist die Multithread-Hardwareunterstützung vollständig sichtbar, sodass weitere Änderungen sowohl an den Anwendungsprogrammen als auch am Betriebssystem selbst erforderlich sind. Die zur Unterstützung der Multithread-Verarbeitung verwendeten Hardwaretechniken sind häufig parallel zu den für das Multitasking verwendeten Softwaretechniken. Die Threading-Planung ist auch beim Multithreading ein großes Problem.

Arten der Multithread-Verarbeitung

Wie wir zu Beginn sagten, haben wir alle die Vorstellung, dass Multithread-Verarbeitung einfach Prozessparallelisierung ist (dh mehrere Aufgaben gleichzeitig ausführen), aber in Wirklichkeit sind die Dinge etwas komplizierter und es gibt verschiedene Typen Multithread-Verarbeitung.

Mehrere grobkörnige Fäden

Best-Prozessoren-CPUs-für-Streaming

Die einfachste Art des Multithreading tritt auf, wenn ein Thread ausgeführt wird, bis er durch ein Ereignis blockiert wird, das normalerweise eine lange Latenzzeitsperre erzeugt. Ein solcher Absturz könnte ein Mangel an Cache sein, der auf Speicher außerhalb des Chips zugreifen muss, was Hunderte von CPU-Zyklen dauern kann, bis die Daten zurückkommen. Anstatt auf die Lösung des Absturzes zu warten, wechselt der Prozessor die Ausführung zu einem anderen Thread, der bereits zur Ausführung bereit war. Erst wenn die Daten des vorherigen Threads eingetroffen sind, werden sie wieder in die Liste der ausführbaren Threads aufgenommen.

Konzeptionell ähnelt dies dem kooperativen Multitasking in Echtzeitbetriebssystemen, bei dem Aufgaben freiwillig die Prozessorlaufzeit aufgeben, wenn sie auf ein Ereignis warten müssen. Diese Art von Multithreading wird als "Block" oder "grobkörnig" bezeichnet.

Interleaved Multithread

Der Zweck dieser Art der Multithread-Verarbeitung besteht darin, alle Datenabhängigkeitssperren aus der Ausführungspipeline zu entfernen. Da ein Thread relativ unabhängig von anderen ist, besteht eine geringere Wahrscheinlichkeit, dass ein Befehl in einer Pipeline-Stufe eine Ausgabe von einem vorherigen Befehl in demselben Kanal benötigt. Konzeptionell ähnelt dies dem im Betriebssystem verwendeten vorbeugenden Multitasking, und eine Analogie wäre, dass das jedem aktiven Thread zugewiesene Zeitintervall einen CPU-Zyklus beträgt.

Multi-Hilo-Auswurf

Natürlich hat diese Art der Multithread-Verarbeitung einen Hauptnachteil, und das heißt, dass jede Pipeline-Stufe die Thread-ID des Befehls verfolgen muss, den sie verarbeitet, was ihre Leistung verlangsamt. Da in der Pipeline mehr Threads gleichzeitig ausgeführt werden, müssen die Freigaben wie der Cache größer sein, um Fehler zu vermeiden.

Paralleles Multithreading

Die fortschrittlichste Art des Multithreading gilt für Prozessoren, die als Superskalare bezeichnet werden. Während eine typische superskalare CPU in jedem CPU-Zyklus mehrere Anweisungen von einem einzelnen Thread ausgibt, kann ein superskalarer Prozessor bei gleichzeitiger Multithread-Verarbeitung (SMT) Anweisungen von mehreren Threads in jedem Zyklus ausgeben. In Anbetracht der Tatsache, dass jeder Thread eine begrenzte Menge an Parallelität auf Befehlsebene aufweist, versucht dieses Multithreading, die über mehrere Threads verfügbare Parallelität auszunutzen, um die mit nicht verwendeten Leerzeichen verbundene Verschwendung zu reduzieren.

Um die anderen Arten der SMT-Multithread-Verarbeitung zu unterscheiden, wird häufig der Begriff "temporäres Multithread" verwendet, um anzugeben, wann Single-Thread-Anweisungen gleichzeitig ausgegeben werden können. Zu den Implementierungen dieses Typs gehören DEC, EV8, Intels HyperThreading-Technologie, IBM Power5, Sun Mycrosystems UltraSPARC T2, Cray XMT sowie AMDs Bulldozer- und Zen-Mikroarchitekturen.