CPU-Grundlagen: Multithreading

Fein- und grobkörnige Paralleleität

Dementsprechend verfolgt dieser Artikel zwei Ansätze: Feinkörnige und grobkörnige Architekturen zur Ausnutzung des Multithreading. Was die Körnigkeit betrifft, ist eine scharfe Grenze schwer zu ziehen. Dennoch gibt es als ein klares Unterscheidungskriterium die Datenabhängigkeiten.

  • Bei grobkörnigem Multithreading geht man davon aus, dass die Daten, auf denen zwei Befehle von zwei verschiedenen Threads gleichzeitig operieren, grundsätzlich nicht voneinander abhängen. Dadurch sind auch die Zeitpunkte der Operationen voneinander unabhängig. Dies beruht darauf, dass die Threads im Wesentlichen durch die Software-Entwicklung explizit definiert sind. Tatsächliche Datenabhängigkeiten, die durch den gemeinsamen Adressraum entstehen, kann der Entwickler etwa durch lokale Daten weit gehend vermeiden. Treten sie dennoch auf, muss die Hardware aber entsprechend reagieren.

  • Bei feinkörnigem Multithreading gilt die Annahme der Unabhängigkeit nicht mehr, hier muss der Prozessor auch auf Registerebene mit Abhängigkeiten rechnen. Gerade diese Einschränkung - die Register zählen nicht mehr zum lokalen Thread-Kontext - ergibt die Unterscheidung der beiden Ansätze.

Die folgenden Abschnitte stellen zwei Ansätze für feinkörnige Parallelität im Multithreading vor (Multiskalarer Prozessor, Trace-Prozessor), gefolgt von dem weit verbreiteten Ansatz des Simultaneous Multithreading (SMT). Im dritten Abschnitt dient dann Intels Pentium 4 als konkretes SMT-Beispiel.