| Multithreading | |||||
|
Beim Multithreading werden die einzelnen Tasks (Aufträge) in kleinere eigenständige Prozesse (= Threads) aufgeteilt. Ein multithreading-fähiger Prozessor ist somit in der Lage, mehrere Threads auf einmal zu bearbeiten. Echte Parallel-Verarbeitung ist nur bei mehreren Prozessoren gegeben. Aber auch ein einzelner Prozessor, der multithreading-fähig ist, kann damit schneller arbeiten, wenn die Threads intelligent abgearbeitet werden, beispielsweise durch Verkürzung von Wartezeiten, optimale Auslastung bzw. Einlastung (Scheduling) von Threads. Im Unterschied zum Multitasking bezieht sich die Nebenläufigkeit nicht nur auf Prozesse sondern auch auf Bearbeitungsstränge (Threads) innerhalb der Prozesse. Intel leitet seine Hyper-Threading-Technologie vom Multithreading ab. Es handelt sich um Simultaneous Multithreading (SMT) beim Pentium 4 und XEON Prozessor. Diese Technologie erhöht die Leistung von multi-threaded Anwendungen, indem sie die Auslastung der On-Chip-Ressourcen (welche in der Intel NetBurst Architektur verfügbar sind) erhöht. Die NetBurst-Ressourcen sind im Normalfall nur zu 30% + X ausgelastet. Hyper-Threading erhöht diese Auslastung durch entsprechende Logik und erzeugt einen zweiten logischen Prozessor. Weitere Beispiele für Prozessoren mit Multithreading sind der UltraSPARC T1 (Niagara), UltraSPARC T2 (Niagara II) oder der Rock Prozessor von Sun Microsystems. Man unterscheidet softwareseitiges Multithreading und hardwareseitiges Multithreading. Softwareseitiges Multithreading Beim softwareseitigen Multithreading steht meist nur ein Prozessor zur Verfügung. Die einzelnen Threads werden effizient auf die zur Verfügung stehenden Ressourcen aufgeteilt. Die Anzahl der Threadwechsel sollte jedoch möglichst gering sein um den dadurch entstehenden Verwaltungsaufwand möglichst gering zu halten. Hardwareseitiges Multithreading Beim hardwareseitigen Multithreading wird das Multithreading von der Hardware unterstützt, indem z. B. mehrere Prozessorkerne die Thread-Abarbeitung parallelisieren oder indem ein Multithreaded Prozessor vorliegt. Ein Multithreaded Prozessor kann mehrere Threads gleichzeitig abarbeiten. Dazu besitzt ein Thread einen eigenen Registersatz mit Stackpointer und Befehlszähler (Programcounter, Befehlszählregister). Häufige Thread-Wechsel bewirken beim hardwareseitigen Multithreading sogar eine Steigerung der Performance, da Konflikte in den Pipelines der Prozessoren (Pipeline Hazards) reduziert werden können. Multithreading-Prozessoren können unterschiedliche Strategien für die Aufteilung und Einlastung der Threads bzw. deren paralleler Verarbeitung anwenden: 1. Switch-By-Event: Ereignisse welchen einen Thread-Wechsel auslösen. 2. Time-Slices: jedem Thread wird eine bestimmte Zeitspanne zugewiesen. 3. Simultaneous Multithreading (SMT). Thread Grundsätzlich ist zu unterscheiden zwischen Prozess, Kernel-Thread und User-Thread. Ab ca. 1995 unterstützen die meisten Betriebssysteme alle 3 Kategorien. Moderne Prozessoren sind i.d.R. mehrfädig, d.h. sie unterstützen hardwareseitiges Multithreading. |
|||||
| Siehe auch: Multitasking Pipeline-Architektur Simultaneous-Multithreading Hyper-Threading SMP Superskalar Thread Pentium-4 Dual-Core NetBurst | |||||