CPU-Grundlagen: Multithreading

Eine weitere Leistungssteigerung bei Prozessoren ist nur durch die parallele Abarbeitung weitgehend unabhängiger Threads möglich. Neben Intels Hyper-Threading stehen weitere viel versprechende Ansätze zur Wahl.

Allgemein teilt man die möglichen Parallelitätsebenen bei der Programmausführung in vier verschiedene Klassen ein:

  • Hardware-Parallelität (Pipeline)

  • Instruktion-Level-Parallelität (superskalar, VLIW)

  • Threadlevel-Parallelität (Multithreading)

  • Prozessparallelität (Multiprozessor)

RISC und superskalare Prozessoren setzen dabei aber nur die Hardware- und die Instruktions-Level-Parallelität um. Die "Enden" dieser Parallelitätsskala sind wohl bekannt, Hardware- und Prozessparallelität kommen seit Jahren zum Einsatz. Gleichwohl ist der Ansatz der Prozessparallelität, also eines MIMD-Rechners gemäß Flynn'scher Klassifikation, in seiner Güte sehr abhängig von der Software. Die Instruktions-Level-Parallelität nutzen superskalare und VLIW-Prozessoren ebenfalls schon sehr intensiv. Daher bleibt nur noch die Threadlevel-Parallelität als Forschungs- und Entwicklungsthema. Es stellt sich zunächst die Frage, was ein Thread eigentlich ist:

  • Ein Thread ist ein Aktivitätsträger (sequenzieller Ausführungsfaden) mit minimalem Kontext (Stack und Register) innerhalb einer Ausführungsumgebung (Prozess). Jeder Prozess besitzt in diesem Fall mindestens einen (initialen) Thread. Alle Threads, die zu ein und demselben Prozess gehören, benutzen denselben Adressraum sowie weitere Betriebsmittel dieses Prozesses gemeinsam.

Diese Definition ist in gewissem Sinn "weich", sie lässt eine Menge Interpretationsraum. Threads können durch den Software-Entwickler definiert sein (Entwicklung von Multithreaded-Programmen), ebenso könnte man kleinere Einheiten, bis hin zu den Basisblöcken (siehe Superskalare Prozessorarchitekturen), als Thread bezeichnen - dann jedoch mit anderem Kontext und Eigenschaften.