Was mich wundert ist, dass sowohl Smartphone SoCs als auch GPUs scheinbar primär durch die Fertigunsverfahren und somit der höheren Anzahl an Transistoren bei gleicher Fläche an performance gewinnen.
Warum ist sowas bei X86 CPUs nicht möglich? Bzw. nicht sichtbar. Hier Skaliert die Leistung in Verbindung mit der Miniaturisierung über die Anzahl der Kerne, vor allem im Server Bereich für teuer Geld.
Was aber auch suboptimal ist, da davon nur Multithreaded Anwendungen profitieren.
Warum kann man nicht einfach die einzelnen CPU Cores "dicker" machen, mit mehr Transistoren die Leistung nach oben skalieren lassen. Mehr Recheneinheiten ALUs oder was weiß ich, was nötig wäre.
Kann man X86 wirklich so schlecht skalieren oder gehen die zusätzlichen Transistoren neuer Fertigungsverfahren wirklich nur für IGP, SRAM Cache und neue Befehlssätze drauf?
Ich finde das irgendwie schade, denn man hat das Gefühl, wir bleiben technisch stehen. als würde man einen Zug bauen, der mit fortschreitender Entwicklung einfach nicht schneller wird.
Stattdessen baut man lieber zusätzliche Gleise und zusätzliche Wagons.
Dummer Vergleich, aber zumindest treffend, wie ich finde.
Intel macht fast die ganze Zeit die Kerne dicker, teilweise ist es extrem was ein Skylake gegenüber einem alten Sandy-Bridge an der Cache-Bandbreite und Register-Anzahl zulegt, allerdings ist die Performance gerade mal ein Viertel gestiegen.
Von Sandy-Bridge zu Skylake hat Intel z.B. die Datenleitungen von den Caches verdoppelt, Intel hat unzählige Register und Buffer für die Ausführung vergrößert:
http://images.anandtech.com/doci/9582/24 - OnTheFly.jpg
Es gibt auch mehr Ports pro Kern, um weniger Konflikte bei der Ausführung zu besitzen, gleichzeitig wurde die Maschine um eine vierte ALU (ab Haswell) und zusätzliche Load/Store-Einheiten erweitert.
Ebenso kann ein Kern von Intel die Maschine im Schnitt mit mehr decodierten Instruktionen füttern, als früher.
Intels Maschine scheint den Großteil vom ILP (Instruction-Level-Parallism) schon extrahieren zu können, insofern liegt der Flaschenhals vermutlich bei einzelnen Instruktionen, die man nur noch nennenswert beschleunigen kann, wenn die Ausführungslatenz sich stark verringert oder der Takt sich erhöht.
Beide Dinge sind stark mit logischen Grenzen und Kompromissen verbunden, man kann viele Schaltungen und Operationen kaum noch zügiger gestalten bzw. das hat dann andere Nachteile.
Genauso wie man den Takt nicht fröhlich hochdrehen kann, ohne eine ganze Reihe anderer Dinge in Kauf nehmen zu müssen.
Das beschränkt sich natürlich nicht nur auf x86, sondern auf jede andere ISA auch.
Egal ob ARM, MIPS, Power, GCN ISA, Maxwell ISA usw.
Hilfe kann man nur noch dort finden, wo man noch Luft hat und die liegt häufig auf Thread-Level-Ebene.
Will man gute Ergebnisse erzielen, dann kommt man auch nicht mehr daran vorbei effizienten Code zu schreiben und selbst dann wird man an eine Grenze stoßen, da nicht jeder Code und nicht jede Berechnung unendlich parallel ausgelegt werden kann.
Der Phenom II hatte 3 Pipelines und der FX 4 Pipelines. Die Effizienz wurde nicht besser. Der Pentium 4 hatte 20 Pipelines, die ihre Stärken und Schwächen hatten.
"Jede Einheit verfügt über einen vierfach skalaren Scheduler und vier Pipelines (statt jeweils drei wie beim Phenom II), wenngleich die ausführenden ALUs nur doppelt vorhanden sind und sich leicht unterscheiden"
Quelle:
[Review] AMD FX-4100, FX-6100 und FX-8150 im PCGHX-Overclocking-Check
Das sind zwei unterschiedliche Dinge, einmal die grobe Anzahl an verfügbaren Ausführungseinheiten (Pipelines), man könnte hier auch von der "Breite" des Designs sprechen und das andere bezieht sich auf die Pipeline-Länge vom Design, also wie viele einzelne Arbeitsschritte im Design vorkommen und je mehr man hat, desto leichter lässt sich ein Design im Schnitt takten.
Der Phenom II hatte 3 ALUs bzw. 3 Pipelines um arithmetische Berechnungen auszuführen, der FX besitzt pro Integer-Kern aber nur 2 ALUs und insgesamt 4 pro Modul/zwei Threads.
Beim alten Phenom würde man mit zwei Kernen für zwei Threads rechnen, also 6 ALUs insgesamt.
Neben den Einheiten für arithmetische Berechnungen gibt es Load/Store-Einheiten oder auch AGUs, dann noch die Pipelines auf Seiten der FPU für Floating-Point-Berechnungen.
Das ist jetzt nur eine grobe Ansicht, aber wenn man stupide von den Schaubildern ausgeht, dann war ein Bulldozer-Modul 10 Pipelines "breit" (4x ALU, 4x AGU, 2x FMA).
Ein alter Phenom-Core 9 (3x ALU, 3x AGU, 3x FP)
Ein Pentium 4 lag bei 2 ALUs (+ eine komplexe), 2 AGUs, 2 FP, wobei hier war die Ausführungsmaschine doppelt so hoch getaktet wie der Rest der Logik, man könnte die Zahlen auch doppelt zählen.
Von der Pipelinelänge liegt ein Phenom glaube ich grob bei 10-15, Bulldozer bei 15-20 und der Pentium 4 mit unterschiedlichen Versionen bot 20-30 Pipeline-Stages an.