Trends bei Multi-Core-Prozessoren

Mehrkernprozessoren brauchen einen intelligenten Systembauplan

26. Januar 2009, 16:06 Uhr | Bernd Reder

Fortsetzung des Artikels von Teil 1

Hindernis Latenzzeit

Bei Einkern-CPUs liegt die Auslastung wegen der Wartzeiten deutlich höher.
Bei Einkern-CPUs liegt die Auslastung wegen der Wartzeiten deutlich höher.

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?

  • Nehmen wir an, zum Zeitpunkt n ist der Thread 0 aktiv und fordert nun Daten aus dem Hauptspeicher an: Die Abfrage wird adressiert und geht zum Level-1-Cache.
  • Beim nächsten Takt n+1 wird umgeschaltet auf den Thread 1, und dieser Thread darf einen Takt lang rechnen.
  • Beim Takt n+2 wird auf Thread 2 umgeschaltet.
  • Beim Takt n+3 wird auf Thread 3 umgeschaltet.
  • Bei Taktzyklus n+4 ist dann wieder Thread 0 aktiv. Seit Taktzyklus n sind nun (ausgehend von einer Taktfrequenz von 1 GHz) ziemlich genau 4 ns vergangen. Dies ist die Zeit, die der Level-1-Cache benötigt, um einen Wert bereitzustellen. Der Thread 0 kann also weiterrechnen, wenn die Daten im Level-1-Cache lagen.
  • Falls die Daten nicht im Level-1-Cache vorhanden sind, so muss auf weitere Cache-Hierarchien zurückgegriffen werden: Als nächstes käme der Level-2-Cache an die Reihe, der 12 ns zur Bereitstellung benötigt. In diesem Fall müsste der Thread 0 weiter warten, aber es sind ja noch drei weitere Threads im Core vorhanden, die weiterrechnen können.

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.


  1. Mehrkernprozessoren brauchen einen intelligenten Systembauplan
  2. Hindernis Latenzzeit
  3. Vier statt zwei Kerne bringen weniger als 100 Prozent Leistungszuwachs
  4. Direkter Zugriff auf Netzwerkschnittstellen verbessert Performance

Jetzt kostenfreie Newsletter bestellen!

Matchmaker+