Hallo allerseits,
mein erster Beitrag hier (darum Hallo in die Runde), denn ich wundere mich die ganze Zeit, dass ein IMO sehr wichtiges Detail einfach ignoriert wird - und zwar die Turbostufen und deren Gueltigkeit. Und noch mehr... ich habe naemlich auch ein bissel rumgemessen (unter Linux) und bin dabei auf etwas Ueberraschendes gestossen:
Sorry, dass das Werk gleich so lang geworden ist.
Schauen wir uns die beiden CPU aus dem Test an:
i5 2500K:
1/2/3/4 sagt Intel, das bedeutet:
Nenntakt 3,3 GHz
4 Kerne unter Last: 1 Stufe - 3,4 GHz
3 Kerne unter Last: 1 Stufe - 3,5 GHz
2 Kerne unter Last: 1 Stufe - 3,6 GHz
1 Kern unter Last: 1 Stufe - 3,7 GHz
FX 8150:
Nenntakt: 3,6 GHz
All Core Turbo: ALLE Kerne unter Last: 3,9 GHz
Max Turbo: Haelfte der MODULE unter Last: 4.2 GHz
"Unter Last" wird bei beiden Herstellern so definiert, dass die betreffenden Kerne NICHT im C6 sind. Wenn das OS also irgendwas anderes als C6 mit ihnen tut, gibt es keinen Turbo. Zusaetzlich gelten noch die bekannten Einschraenkungen mit TDP und Waerme.
Ergo: Nehmen wir ein Szenario an, das alle Kerne unter Last setzt (bzw. C6 verhindert), dann taktet (unter den passenden Umstaenden) der Bulldozer von 3,6 auf 3,9, waehrend Sandy von 3,3 auf 3,4 taktet. Unter diesen Umstaenden ist es absolut kein Wunder, dass bei dem Test das rauskommt, was rauskommt. Gewuenscht haette ich mir zumindest so eine Betrachtung oder eine Evaluation der Wirksamkeit des Turbo anhand dessen, was er theoretisch schaffen koennte - siehe oben.
Auch oft ignoriert und fast ueberall falsch dargestellt. "Max Turbo" gilt fuer die Haelfte der MODULE, nicht die Haelfte der Kerne! ...und zwar anscheinend unabhaengig von der Zahl der aktivierten Module. EIn FX6100 auf Arbeit, mit dem ich eine Reihe von Versuchen gemacht habe, hat kein Problem damit, mit 2 Modulen (von 3, aber eigentlich sind es ja 4, von denen AMD eins deaktiviert hat) max Turbo zu machen - im Idealfall also mit 4 Threads. Gemessen und getestet unter Linux mit manuell gesetzter Affinitaet und "mhz" aus den lmbench-Tools als Messprogramm (das liest den Takt nicht aus irgendwelchen Registern, sondern ermittelt ihn ueber das Timing ausgewaehlter ALU-Operation - hat bislang auf allen CPUs, die ich damit getestet habe, perfekt funktioniert).
Zum Thema "Effektivitaet von CMT":
Kernelcompilation unter Linux mit
...zwei Threads EINES Moduls: 15m12.427s
...je ein Thread von ZWEI Modulen: 11m51.664s
(nicht ueber die Zahlen wundern, das war untertaktet auf 1400 MHz, siehe unten)
Im Vergleich zu Intels Lynnfield i7 860 (keine Sandy zum Testen vorhanden), dieses Mal mit ALLEN Threads mit vollem Takt und Turbo im Vergleich zu deaktiviertem HT/CMT:
FX6100 OHNE CMT, also 3 Kerne von drei Modulen: 3m28.108s
FX6100 MIT CMT, also 6 Kerne, 3 Module: 2m22.931s
i7 860 OHNE HT (4 Threads, 4 Kerne): 2m21.761s
i7 860 MIT HT (8 Threads, 4 Kerne): 1m58.376s
Wenn man davon absieht, dass der bald zwei Jahre alte Lynnfield mit dem kleineren FX 6-Kerner kein Problem hat, sieht man, dass das CMT in der Tat deutlich wirksamer bei gut parallelisierbaren Lasten ist als Intels HT.
Unter Linux existiert uebrigens auch kein Schedulingproblem... die Schedulingdomaenen werden so gesetzt, wie es Linux auch bei HT macht: Siblings werden erst benutzt, wenn pro Kern (Intel) oder Modul (AMD) schon ein Thread laeuft. Sprich: 3 mit Vollast laufende Threads laufen beim FX6100 mit je einem Thread pro Modul.
Und zu guter Letzt... das, was mich geschockt hat (und das ich so auch nicht im Netz gefunden habe):
Bei Lasten, die die neuen Befehlssatzerweiterungen (AVX und Co) nicht verwenden, ist ein Zambezi-Kern etwa genauso schnell wie ein Bobcat-Kern (Zacate) bei gleichem Takt! Unser E-350 laesst sich auf 1422 takten, der Zambezi auf 1400... dabei ergibt sich beim Kernelcompilieren:
1 Zambezi-Modul mit 2 Kernen @ 1.4 GHz: 15m12.427s (siehe auch oben)
2 Zacate-Kerne @ 1.422 GHz: 15m33.807s
Kompiliert wurde jeweils mit Parallelitaet 4 (also 4 Threads - make -j4), so dass die jeweils 2 Kerne wirklich ausgelastet werden.
nbench (ziemlich alter single-thread Benchmark):
Zambezi@1.4 GHz, Dual Channel DDR3-1333
MEMORY INDEX : 9.715
INTEGER INDEX : 10.926
FLOATING-POINT INDEX: 15.534
Zacate@1.422GHz, Single Channel DDR3-1066
MEMORY INDEX : 9.153
INTEGER INDEX : 11.731
FLOATING-POINT INDEX: 15.690
Ein uralter K7 Thunderbird ist bei 1.4 GHz uebrigens etwa ebenso schnell...
OS war jeweils Linux 3.1, nbench war mit gcc und -march=native compiliert (was bei Zambezi allerdings zu K10-Optimierungen fuehrt, da der benutzte gcc 4.5 ihn noch nicht kennt - macht aber nichts, denn ich schrieb ja: Software, die die neuen Erweiterungen nicht nutzt).
Vielleicht sollte CB einen taktbereinigten Vergleich mit Zacate mal ernsthaft erwaegen... ich frage mich dabei, wohin der ganze Aufwand geflossen ist, denn bobcat ist ja nun wirklich sehr einfach und trivial. Sollten es tatsaechlich "nur" die potentielle Taktsteigerung und die Befehlssatzerweiterungen sein?
Viele Gruesse,
Jan