Einleitung
Der Zeitpunkt, auf den viele unserer Leser bereits lange warteten, ist nun erreicht: der offizielle Launch von AMDs erstem Prozessor auf Basis der neuen Bulldozer-Architektur (zu unserem
Bulldozer Benchmark-Artikel). Diesem voraus gingen viele Gerüchte und
Spekulationen. Umso näher dieser inoffiziell mehrmals verschobene Tag rückte, umso mehr häuften sich vorab von Dritten veröffentlichte Benchmarkergebnisse. AMD selbst versüßte uns die Zeit mit vielen Architekturdetails und Hintergrundinformationen, welche u. a. auf den letzten beiden „Hot Chips“-Veranstaltungen und der Konferenz ISSCC 2011 bekanntgegeben wurden. Damit konnte man sich zwar schon mehr vom zu erwartenden realen Prozessor vorstellen, aber weiterhin fehlten wichtige Details, wie z. B. die zukünftigen Taktfrequenzen der Modelle sowie Art und Umfang von neuen Turbo-Core-Modi.
Dank der vielen schon aufgetauchten Informationen sind die meisten dieser Fragen nun auch beantwortet, bis auf die wichtigste: Welche Leistung liefert diese neue Serie von Prozessoren? Das soll im Detail untersucht werden. Aufgrund der knappen Vorbereitungszeit bietet es sich jedoch an, diese Erkenntnisse in mehreren Teilen aufzuarbeiten.
Um es vorweg zu nehmen: die neue Mikroarchitektur stellt eine grundlegende Änderung gegenüber AMDs anderen Prozessorkernen („Stars“ wie z. B. im Phenom II X6, „Husky“ im Llano oder „Bobcat“ im Zacate oder Ontario) dar. Die Situation ist der bei der Einführung des P4 von Intel vergleichbar. Hierbei ist aber nicht der mit Pentium 4 häufig verbundene hohe Energiebedarf gemeint, sondern der Grad der Änderung in der Architektur, was erst mit Einsatz entsprechend optimierter Software richtig zur Geltung kam. Damals war der Energieverbrauch v. a. für Desktopsysteme oder Server noch nicht so sehr im Fokus wie heute. Darum wurde auch die Bulldozer-Mikroarchitektur u. a. für eine gute Energieeffizienz ausgelegt, was ein Hauptgrund für das Bulldozer-Modulkonzept – der Zusammenlegung zweier Rechenkerne inkl. FPU zu einem optimierten Dual-Core-Modul – war.
Schaut man etwas in die Vergangenheit, sind die vielen Neuerungen beim Bulldozer gar nicht erst seit der ersten Vorstellung 2009 bekannt. Bereits 2005 gab es Aussagen von AMDs damaligem CTO Fred Weber, welcher über die Richtungen für zukünftige Entwicklungen sprach. Diese Punkte wurden dabei von ihm hervorgehoben:
- Bevorzugung von Thread Level Parallelism (TLP) statt Instruction Level Parallelism (ILP), also höhere Performance durch mehr Threads anstelle von höherer Single-Thread-Leistung
- Kombination von Befehlen (wie bei Intels MicroOp-Fusion, von Weber „Instruction Combining“ genannt)
- Höhere Taktfrequenzen für höhere Single-Thread-Leistung
- Niedrigere Speicherzugriffslatenzen
- Niedrigere Sprungvorhersagelatenz und deutlich bessere Sprungvorhersage
- Geteilte Nutzung von Einheiten wie die FPU durch zwei Kerne zu deren besseren Auslastung und damit erhöhter Energieeffizienz
- Helper-Threads, welche bald benötigte Daten vorab in die Caches laden
(siehe
Fred Weber Interview)
Von all diesen Punkten wurde bis auf die Helper-Threads alles so im Bulldozer verwirklicht.
Schließlich gab es ebenfalls 2005 einen Hinweis von AMDs CTO Charles R. Moore, einem weiteren wichtigen Mann hinter der Bulldozer-Architektur. Dieser lieferte schon damals in einer Folie Argumente für ein entsprechendes Architekturkonzept - dem "Cluster-based Multithreading" oder kurz CMT. Demnach sollte für die Ausführung von zwei Threads - passend zu Fred Webers Aussagen - ein Teil der Einheiten eines Prozessorkerns verdoppelt und der Rest gemeinsam von den Threads genutzt werden:
Nach diesen ersten eher vagen Andeutungen tauchten erstmals 2008 in Patenten Architekturbilder auf, welche den grundsätzlichen Aufbau eines Bulldozer-Moduls darstellten:
Interessant hierbei ist die Bezeichnung des Moduls als „Core“, während die jetzigen „Integer Cores“ den in den Patenten beschriebenen „Integer Clustern“ entsprechen. Wie man das aber genau nennt, ist eine Frage der Definition. Aber da hat selbst Fred Weber schon 2005 von zwei Kernen gesprochen, die sich eine FPU teilen. Somit ist diese Darstellung auch nicht erst eine Erfindung des Marketings aus den letzten Jahren.
In der folgenden Folie ist zu sehen, wie es heutzutage dargestellt wird:
Ziel des Ganzen war es, die Energieeffizienz zu erhöhen. Da der Entwurf solcher Mikroarchitekturen immer einen Kompromiss darstellt (wie praktisch jede Entwicklung eines massengefertigten Produkts), ist auch die Bulldozer-Architektur ein solcher Kompromiss. Weitere Hintergründe dazu liefert Pollacks „Gesetz“, benannt nach einem Intel-Entwickler. Demnach beeinflussen sich Schaltungskomplexität, Taktfrequenz, Rechenleistung pro Takt, Energieaufnahme und Schaltungsfläche nach bestimmten (Daumen-)Regeln gegenseitig. [1] [2]
Mit etwas Aufwand kann man diese Faktoren aber zu seinen Gunsten beeinflussen. Eine Möglichkeit ist das moderne Energiemanagement in Prozessoren, welche den Idle- und auch den Last-Verbrauch senken können und sogar leistungsfördernde Maßnahmen wie einen Turbo-Modus ermöglichen.
Eine weitere Möglichkeit ist, komplexe Schaltungen (mit höherem Verbrauch) durch eine stärkere Auslastung mit Hilfe mehrerer Threads (häufig zwei) effizienter zu nutzen. Da bei neueren Herstellungsprozessen die Leckströme prozentual schon relativ groß werden können (~20% oder mehr), ist es sogar schon „teuer“, eine Schaltung nur zur 50% zu nutzen und es wird eine höhere Nutzungsquote angestrebt. Das erfolgt dann durch Simultaneous Multithreading (SMT bzw. Hyperthreading bei Intel) oder andere Multithreading-Techniken. Der Mehraufwand dafür hält sich in Grenzen. Beim Pentium 4 sprach Intel von etwa 5% zusätzlicher Chip- bzw. Die-Fläche. Bei Nehalem oder Sandy Bridge dürfte dieser Anteil auf Grund von weiteren Komponenten auf den Dies noch kleiner sein. So eine gemeinsame Nutzung hat aber den Nachteil, dass die Leistung der einzelnen Threads im Vergleich zum Single-Threaded-Betrieb deutlich nachlässt. Wenn z. B. ein Programm auf Sandy Bridge mit Hyperthreading 20% mehr Leistung erreicht, bedeutet das auch, dass jeder Thread nur mit 60% der Single-Thread-Leistung läuft.
Genau dieses Konzept der gemeinsamen Nutzung von komplexen Einheiten hat nun auch AMD für sich entdeckt und setzt es im Bulldozer und den darauf folgenden Architekturgenerationen um. Allerdings ist das Konzept scheinbar der auserkorene Gewinner nach mehreren Entwicklungsanläufen (wenn man viele Patente nach den K7-Entwürfen betrachtet) und verschiedenen Einflüssen (z. B. Mikroarchitekturguru Andy Glew). Die Herangehensweise ist allerdings eine andere als bei Intel. Man begann nicht mit einem großen, leistungsfähigen Core, um festzustellen, dass noch ein zweiter Thread darauf passt. Sondern man wollte von vornherein zwei Kerne nehmen und die komplexen Einheiten gemeinsam nutzen, wo es sinnvoll war. Das ermöglichte dann natürlich auch, diese Einheiten noch etwas leistungsfähiger zu gestalten, da die „Kosten“ in Form höheren Verbrauchs oder Die-Fläche geteilt werden. Folgende Einheiten wurden für eine geteilte Nutzung bestimmt:
- Instruction Fetch, Instruction Prefetch, Instruction Cache
- Sprungvorhersage
- Decoding/Dispatch
- Floating Point Unit mit Scheduler und Ausführungseinheiten
- L2-Cache
Für jeden Thread separat vorhanden sind die Integer-Kerne, welche folgende Einheiten enthalten:
- Integer Scheduler
- Integer Ausführungseinheiten
- Load/Store-Unit
- L1-Datencache
- Retirement
Die genauere Arbeitsweise der Einheiten ist im Spekulationsartikel beschrieben und wird hier gegebenenfalls nur angerissen.
Da man bei der bisherigen „Family 10h“-Microarchitektur (von Barcelona bis Thuban) einige Flaschenhälse bzw. weniger effiziente Einheiten identifiziert hat, wurden die Integer-Kerne entsprechend überarbeitet. Das führte teilweise zu Einsparungen, aber auch zu Verbesserungen bzw. Optimierungen.
Diesen Artikel bookmarken oder senden an ...