Hardwareseitiges Multithreading

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Die fraglichen Angaben werden daher möglicherweise demnächst entfernt. Bitte hilf der Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst. Näheres ist eventuell auf der Diskussionsseite oder in der Versionsgeschichte angegeben. Bitte entferne zuletzt diese Warnmarkierung.

Prozessoren mit hardwareseitigem Multithreading (auch mehrfädige Prozessoren genannt) können auf jedem Prozessorkern parallel mehrere Threads, d. h. mehrere Programme oder Programmteile gleichzeitig ausführen. Hardwareseitiges Multithreading wird hauptsächlich durch wenige zusätzliche Register, die nur etwa 5% der Prozessorfläche ausmachen, ermöglicht.[1]

Im Gegensatz zur Ausführung auf mehreren Prozessoren müssen sich die Threads bei hardwareseitigm Multithreading die üblichen 95% Betriebsmittel eines einzigen Prozessorkerns teilen. Da üblicherweise die Recheneinheiten eines Prozessor-Kerns extrem selten optimal ausgelastet werden, ergibt sich bei hardwareseitigem Multithreading[2] gegenüber einfachen Prozessoren eine bis zu 30% höhere Rechenleistung.[3]

Der Wechsel zwischen den Programmen erfolgt im Vergleich zum Kontextwechsel des Betriebssystems (10–30 ms) wesentlich schneller (0,1–10 µs) und die Abarbeitung innerhalb der Pipeline_(Prozessor) erfolgt teilweise sogar parallel. Hierzu besitzt jeder Prozessor-Kern zwei "Architecture-States" inklusive Registersatz, Stapelspeicher und Programmzähler.[4] Ein mehrfädiger Prozessor ist somit logisch und bezüglich der Hardware-Komplexität zwischen einem einfachen Prozessor und einem Mehrkernprozessor anzusiedeln.

Nutzen von Multithreading[Bearbeiten]

Der Nutzen von Multithreading ist eine bessere Auslastung der Ressourcen der CPU.

Zwar wird in modernen Prozessoren, welche alle eine Pipeline haben, beispielsweise durch Out-of-order execution schon versucht die Auslastung zu steigern, dennoch haben Untersuchungen ergeben, dass viele Teilwerke der Pipeline durch bspw. simultanes Multithreading zusätzlich noch besser ausgelastet werden können. Ein Grund dafür sind Pipeline-Hazards, die die Pipeline kurz anhalten können (engl. to stall).

Multithreadingfähige Prozessoren bearbeiten deshalb mehrere Threads quasi-gleichzeitig. Dies kann in verschiedenen Varianten erfolgen:

  1. time-slices: Ein Algorithmus legt fest, wie viel Zeit jeder Thread bekommt, sodass immer nur ein einzelner Thread ausgeführt werden kann.
  2. switch-by-event: Bestimmte Ereignisse können einen Threadwechsel auslösen.
  3. simultanes Multithreading (SMT): Hierbei werden Bereiche der Registerfile für einen kleinen Prozessorkontext reserviert, auf den ein Thread ausgeführt wird. Parallel ausgeführte Threads bedienen sich somit an ein und demselben Rechenwerk. Insbesondere bei superskalaren Rechnern wird hierdurch eine bessere Auslastung erzielt.
  4. Core MultiThreading: Der Prozessor besitzt mehrere Arithmetisch-logische Einheiten (ALU), die sich eine Gleitkommaeinheit (FPU) teilen. Somit können mehrere Threads gleichzeitig ausgeführt werden.

Multithreadingfähige PC-Prozessoren[Bearbeiten]

Im PC-Bereich werden heutzutage "DualCore", "QuadCore" oder "HexaCore" -Prozessoren verwendet, die mit zwei, vier oder sechs parallelen Pipelines arbeiten (siehe Simultaneous Multithreading und Hyper-Threading). Diese werden vom Betriebssystem ähnlich wie zwei separate Prozessor-Kerne eines symmetrischen Multiprozessorsystems behandelt.

Multithreadingfähige Prozessoren für eingebettete Anwendungen[Bearbeiten]

In Anwendungen im Bereich eingebetteter Systeme bieten mehrfädige Prozessoren neben dem reinen Leistungsgewinn zusätzliche Möglichkeiten durch explizite Verwendung der Mehrfädigkeit. Solche Prozessoren bieten programmierbare Algorithmen zur Steuerung der einzelnen Programm-Threads (hier „Kontext“ genannt). So kann beispielsweise ein Kontext deterministisch einen gewissen Anteil der Takte und damit der Prozessor-Leistung belegen. Die Kontexte können auch durch eine Prioritätensteuerung um die Rechenzeit konkurrieren.

Die einzelnen Kontexte können durch entsprechende Befehle in einen Wartezustand versetzt und durch Hardware-Ereignisse aufgeweckt werden. Hierdurch sind sehr schnelle Reaktionen des Systems möglich, da (im Gegensatz zum klassischen Hardware-Interrupt) keinerlei Overhead beim Kontext-Wechsel notwendig ist.

Kontexte, die nur einen geringen Teil der Clock-Zyklen belegen, können dauerhaft zyklisch laufen, ohne die Leistung des Systems merklich zu beeinflussen und z. B. zum Erzeugen oder Entschlüsseln schneller Signale eingesetzt werden.

Somit kann durch den Einsatz von multithreadingfähigen Prozessoren durch nur geringen Aufwand im Prozessor-Chip auf dedizierte Hardware oder zusätzliche Prozessoren bzw. digitale Signalprozessoren verzichtet werden.

Da in diesen Anwendungen deutlich mehr als zwei Threads sinnvoll sind, werden in multithreadingfähige, eingebettete Prozessoren nicht mehrere Pipelines implementiert, sondern die erste Stufe der Pipeline entscheidet über den als nächsten auszuführenden Kontext.

Beispiele für mehrfädige Prozessoren für eingebettete Anwendung:

  • Ubicom 3K (8 Threads)
  • Ubicom-5K-Familie (10 Threads)
  • MIPS-34K-Familie (5 Threads)
  • Innovasic fido 1100 (ein Hauptprozessor mit 5 Threads, 4 zusätzliche I/O-Prozessoren)

Siehe auch[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Hyper-Threading Technology Architecture and Microarchitecture (Intel)
  2. Die Grundlagen des hardwareseitgen Multithreading anhand von Intel Hyperthreading (Servermeile Technet - Die Wissens-Datenbank)
  3. Hyper-Threading Technology Architecture and Microarchitecture (Intel White Paper)
  4. Performance Insights to Intel® Hyper-Threading Technology (Intel)