Du rechnest den Ausführungseinheiten zu viel Bedeutung bei. Wichtiger ist das, was davor passiert (Fetch, Decode, Schedule). Hier trennt sich die Spreu vom Weizen. Ausführungseinheiten müssen letztendlich einfach nur ausreichend dimensioniert sein. Sprich, die vom Scheduler ausgespuckten µOps müssen von den Ausführungseinheiten schnell genug abgearbeitet werden, damit das Frontend nicht ins Stocken gerät.
Die Ausführungseinheiten sind wirklich nicht der Knackpunkt, das Frontend (bis auf die Branch Prediction) aber auch nicht. Du kannst bei normalen CPU Programmen das Front-End beliebig breit machen und auch entsprechend viele FUs dazu bauen und würdest trotzdem nicht mehr viel Leistung rausholen. Der limitierende Faktor sind einerseits Datenabhängigkeiten und andererseits Kontrollflussabhängigkeiten aka. bedingte Sprünge.
Datenabhängigkeiten lassen sich nicht beheben, man kann nur versuchen sie möglichst zu umgehen (-> Out of Order Execution, Multithreading).
Bei bed. Sprüngen kommt die Sprungvorhersage zum Einsatz.
Will man also die Performance erhöhen, muss man den Umgang mit einem oder beiden Problem(en) verbessern.
Intel hat bei Nehalem und Sandy Bridge hauptsächlich OoO Execution und teilweise Multithreading verbessert, das sorgt dafür, dass die FUs besser ausgelastet werden -> höhere IPC, höhere Performance, relativ viele Transistoren.
Eine andere Methode ist es einfach die Pipelinelänge zu verändern, d.h. man erhöht die Taktfrequenz. Dadurch steigt zwar nicht die Auslastung der Einheiten, aber da die Einheiten schneller Arbeiten, steigt trotzdem die Performance (ohne dass die Datenabhängigkeiten stärker werden). Natürlich ist das ganze nicht so einfach (hat man am P4 gesehen). Denn je länger die Pipeline wird, desto stärker fallen falsch vorhergesagt Sprünge ins Gewicht. Ergo besteht hier das Hauptproblem darin die Sprungvorhersage möglichst gut zu machen oder alternative Lösungen für falsch vorhergesagt Sprünge zu finden. Außerdem muss man beachten, dass mit steigender Taktfrequenz auch die Stromverbrauch zunimmt.
AMD versucht sich mit BD an dieser Methode. Die Kontrollflussabhängigkeiten versucht man mit Hilfe einer sehr stark aufgebohrten Branch Prediction Unit zu kompensieren. Andererseits hat man auch noch mehre Patente, die in dem Bereich noch weitere Verbesserungen beschreiben, z.B. eager execution (Ausführung von beiden Pfaden nach einer Bedingung auf eng gekoppelten Kernen). Das Problem mit dem höheren Stromverbrauch versucht man durch feingranulares Clock- und Powergating zu kompensieren, d.h. die Transistoren takten höher (-> brauchen mehr Strom), dafür reduziert man die Anzahl der Transistoren, die aktiv sind (-> weniger Stromverbrauch).
Interessanter ist die Frage, ob und wie viel Performance verloren geht, wenn 2 Threads auf einem Modul statt 2 ausgeführt werden. Offenbar sieht AMD dort keine Probleme. Ich habe da aber Bedenken. Das gleiche Problem hat(te) Intel ja auch, was sich mit Windows 7 allerdings gebessert hat, indem zwischen Kernen und logischen Prozessoren strikter differenziert wird.
Das Problem hatte Intel deswegen, weil sich 2 Threads dann z.B. um 3 ALUs und eine SSE Einheit gestritten haben. Das Problem hat AMD nicht, den jeder Thread hat seine eigene Pipeline mit seinen eigenen ALUs. Die einzige Sache, wo sich die beiden Threads behindern können ist bei 256Bit AVX Instruktionen.
AMD behauptet ja 1 Thread im Modul = 100% 2 Threads = 160%
bzw pro int core gesehen wenn das modul nur 1 thread hat bringt der int kern 100% wenn beide int cores ausgelastet sind nur mehr 80%
Ich glaube viele nehmen die damalige Aussage zu sehr auf die Goldwaage. Es wurde SMT mit CMT verglichen und dabei gesagt statt +5% Transistoren für +20% Leistung bekäme man für +15% Transistoren +80% Leistung. Einfach 2x80% zu nehmen ist da doch recht weit hergeholt. Aufgrund der Architektur sollte bei reinem Int-Code durchaus +100% drin sein.
frage wäre nur ob sie da von unabhängigen threads ausgehen oder von abhängigen, wenn sie zum teil voneiannder abhängig sind oder mit den selbend aten rechnen gibts durch den gemeinsamen L2 sicher nen kleine boost
Bei der obigen Aussage hatten sie vermutlich weder das eine noch das andere im Sinn, sondern wollten nur verdeutlichen, dass CMT im Vergleich zu SMT deutlich mehr bringt. Aber es richtig, dass bei "abhängigen" Threads der gemeinsame L2 Cache ein Vorteil bringen sollte.
Wenn nur ein Thread läuft, dürften alle ressourcen für einen Kern bereitstehen, d.h. relativ hohe pro Thread Leistung. Wenn jetzt 2 oder 4 Threads laufen dürfte die Performance nicht so gut sein wie bei einem, wobei die IPC bei 2 Threads immernoch höher sein soll als damals beim Phenom 2, wenn dieser 2 Threads bearbeitet.
Das ist eine schwere Abschätzung. Ich glaube nicht, dass die zusätzlichen Ressourcen bei nur einem Thread/Modul so viel bringen, entsprechend glaube ich auch nicht, dass die Leistung bei 2 Threads / Modul stark abnimmt. Bei speziellen Tasks, die sehr auf einen großen L2-Cache angewiesen sind, mag das vielleicht zutreffen, aber im Mittel wird der Unterschied vermutlich nicht so groß sein, denn die kritischen Bereiche sind weiterhin separat pro Kern vorhanden.
Im Vergleich zum K10.5 wurde sowohl die Anzahl der FUs/Kern reduziert, als auch die Pipeline verlängert, was beides der IPC abträglich ist. Da AMD aber bereits bestätigt hat, dass die IPC größer sein wird als beim K10.5 scheinen sie auch den Rest optimiert zu haben. Allerdings erwarte ich auf Grund der ersten beiden Punkte keine all zu starke IPC-Verbesserung.
Zudem könnten bei 2 oder 4 Threads ja 2 bzw. 4 Module arbeiten und volle ressourcen zur Verfügung stellen, anstatt für beispielsweise 2 Threads nur 1 Modul arbeiten zu lassen, mit dem Nachteil dass es nur mehr 80% der Leistung sind, als wenn nun 2 Module arbeiten und pro Modul 1 Kern als 1 Thread arbeitet.
Ich tippe auf Grund des BD Designs (schlankere Pipelines, dafür höherer Takt) eher auf eine Strategie, die Threads auf wenige Modulen zu bündeln und dafür die anderen Module abzuschalten. Dafür darf dann der Turbo üppiger ausfallen. Der höhere Takt dürfte sich im Optimalfall in linear steigender Leistung ausdrücken. Die zusätzlichen Ressourcen dagegen bringen nur relativ wenig und kosten trotzdem viel Strom.
Aber ein Bulldozer Modul leistet nur 80% eines vollwertigen, fiktiven BD Dualcores.
Also sind die Rechnungen mit 180% falsch
Ich würde sagen, sie sind weder falsch noch richtig, gehen einfach daran vorbei, was damals mit der Aussage bezweckt wurde, nämlich zu verdeutlichen, dass CMT mehr bringt als SMT.
Zusätzlich zu dem was du bzgl. zwei Threads pro Modul geschrieben hast, wird denk ich noch Mischbelastung interessant, also wenn nicht nur die integer cores angesprochen werden, sondern auch noch die FP-Einheit. Eine sorteinreine Belastung ist eher in Benchmarks interessant, in der Realität wirst du aber das nicht häufig haben.
Die Frage ist also, wenn mann von den 180% Steigerung ausgeht bei 2 integer cores, wieviel bleibt davon übrig wenn man zusätzlich FP-Instruktionen mit einfließen lässt. In dem Fall profitiert aktuell ggf. von SMT. Interessant wird dann natürlich noch die Unterstützung vom OS, mit Win7 hat MS in Zusammenarbeit mit Intel wohl einiges bzgl. der Optimierung hinsichtlich SMT gemacht. Aber ich denke du wirst recht behalten und weder Intel noch AMD werden sich da viel nehmen.
Da die 256Bit FPU eines Moduls eigentlich aus 2x 128Bit besteht, die auch separat arbeiten können, ändert sich eigentlich nicht viel (K10.5/Nehalem 1x 128Bit FPU). Es kann also pro Takt entweder ein Kern eine 256Bit AVX-Instruktion absetzen oder eben 2 128Bit Instruktionen oder jeder Kern je eine 128Bit Instruktion. Ungünstiges Scheduling sollte bei CMT weniger ausmachen als bei SMT. Es könnte sich aber negativ auf den Stromverbrauch und damit auf den max. Turbo auswirken (siehe oben).
Sandy Bridge hat hingegen einen Vorteil bei 256Bit AVX-Instruktionen, da es je eine pro Kern und Takt ausführen kann. Das wird aber wohl häufig dadurch kompensiert, dass AMD FMA unterstützt, dabei werden eine Addition und eine Multiplikation zusammen ausgeführt (zählt als 2 Ops), so dass man in diesem Fall auch auf 2 256Bit Ops / Takt und Modul käme.