Es stellt sich die Frage, welche Herausforderungen bei einem Mehrkern-Chip zu meistern sind, bei dem ein Core eventuell mehrere Threads ausführen kann.
Zunächst ist anzumerken, dass die Latenzzeiten der Cache-Speicher beziehungsweise des Hauptspeichers durch Multi-Core-Technologien nicht auf 0 gesetzt werden können. Außerdem ist zu beachten, dass bei mehreren Cores auf einem Chip die Anzahl der Daten, die zwischen den Cores und der Außenwelt ausgetauscht werden müssen, eher größer als kleiner wird. Wenn etwa ein einzelner Core immer 256 Bit in seinen Level-1 Cache lädt, so benötigen zwei Cores die doppelte Bandbreite zum Hauptspeicher.
Um die Latenzzeiten zwischen Prozessor-Core und den Speichern zu überlisten, setzt Sun bei den Ultra-Sparc-T-Prozessoren einen Trick ein. Vereinfacht dargestellt, besitzen die Cores intern die Registersätze in vierfacher Ausfertigung. Jedem Registersatz wird vom Betriebssystem Solaris ein Thread zugeordnet.
Zwischen den Registersätzen wird mit jeder Taktrate umgeschaltet. Ist zum Zeitpunkt 0 der Thread 0 in einem Core aktiv, so ist beim nächsten Taktzyklus der Thread 1 aktiv, bei Takt 2 der Thread 2, bei Takt 3 der Thread 3. Beim vierten Taktzyklus ist wieder Thread 0 an der Reihe. Was hat das zur Folge?
Angenommen, der Thread 0 fordert zum Takt n Daten an. In diesem Zeitraum werden die arithmetischen und logischen Einheiten der CPU eigentlich nicht genutzt, sondern die CPU adressiert den Hauptspeicher. In den Takten n+1, n+2 und n+3 wird die CPU dann aber durch die Threads 1, 2 und 3 genutzt.
Bei einer klassischen Single-Core-Single-Thread-CPU würde der Thread innerhalb des Cores den Speicher adressieren, die nächsten drei Taktimpulse würde ohne Folgen bleiben, weil die CPU auf die Daten warten muss. Die Auslastung der CPU zwischen den Takten n bis n+3 würde bei dem klassischen Prozessor bei 0 Prozent liegen, bei der CMT-CPU sind es dagegen 75 Prozent.
Dramatischer würde dies, wenn die Daten aus dem Hauptspeicher angefordert werden müssten. Bei der CMT-CPU wäre zwar ein Thread quasi stillgelegt, aber die Auslastung würde durch die Thread-Umschaltung erheblich gesteigert.
Selbstverständlich werden auch bei diesen CPUs nicht einzelne Bytes nachgeladen, sondern der Cache wird immer gleich mit 32 Byte befüllt. Dahinter verbirgt sich die Hoffnung, dass das nächste Byte, das die CPU anfordert, sich innerhalb dieses 32-Byte-Blocks befindet.
Mit einer solchen Technik lässt sich also Latenz – zumindest teilweise – austricksen. Bei den Ultra-Sparc-CMT-Prozessoren hat Sun bei Umsetzung des Chip-Multi-Threadings (CMT) darauf Wert gelegt, dass die eigentliche Befehlspipeline möglichst einfach und kurz ist. So gibt es innerhalb der Cores keine Branch-Prediction oder Out-of-Order Execution. Dies hätte das Threading extrem verkompliziert.
Stattdessen haben sich die Entwickler dafür entschieden, nicht nur einen, sondern gleich mehrere Cores auf einem Chip zu implementieren. Bei solchen Mehr-Core-Prozessoren »lauern« allerdings andere Herausforderungen: Während man einen einzelnen Core relativ einfach mit Daten aus dem Hauptspeicher versorgen kann, wird dies bei mehreren Cores schwierig. Denn irgendwann schlägt nicht nur die Latenz zu, sondern auch der Faktor Bandbreite.
So ist zum Beispiel bei Intel-Prozessoren zu erkennen, dass eine Verdopplung der Cores nicht automatisch eine Verdopplung der Leistungsfähigkeit mit sich bringt. Hier entpuppt sich der Front-Side-Bus (FSB) als Flaschenhals. Alle Cores eines heutigen Multi-Core-Server-Prozessors von Intel teilen sich einen Bus zur Kommunikation mit dem Hauptspeicher und der Peripherie. Erst bei der neuen Core-i7-Architektur ist das anders.