ja ich weis das ist das hyperthrading und bei der leistung meinte ich z.b.
i7 L2 Cache: 4x 256kB
amd L2 Cache: 3x 2MB Shared (was heist dieses shared da eigentlich?)
i7 Max. Turbotakt: 3.90GHz
amd Max. Turbotakt: 4.10GHz
Okay, beantworten wir mal ein paar Fragen.
- Cache-Größen an sich sagen relativ wenig aus. Mehr ist nicht immer besser, denn mehr heißt meist auch langsamer - deswegen gibts pro Kern typischerweise auch nur 16 (AMD FX), 32 (Intel seit Ewigkeiten) oder 64 (AMD K10) KB L1-Cache. Ist zwar wenig, dafür ist er eben verdammt schnell - auf meinem Phenom erreicht man so zum Beispiel lesend eine Datenrate von 32 Bytes pro Takt mit einer Latenz von ca. 4 Takten, was einer maximalen Verarbeitungsrate von ca. 134 GB/s bei einem Takt von 4.2 GHz entspricht (Single Core-Turbo und so...), und schreibend immerhin noch 16 Bytes pro Takt. Wenn man zum Beispiel mehrere Funktionen auf denselben Datensatz ausführen will, so ist es schneller, die Daten blockweise zu verarbeiten, als alles doppelt und dreifach aus dem RAM zu laden - quasi 1x den L1-Cache mit Daten füllen, ordentlich damit rechnen, dann erst den nächsten Datenblock laden und wieder rechnen.
Der FX verhält sich da aber ein bisschen anders. Erstens ist der L1-Cache mit 16KB gerade mal auf Pentium 4-Niveau, andererseits werden Daten, die man in ihn hinein schreibt, sofort in den großen (und entsprechend lahmen) L2-Cache geschrieben. Damit laufen Funktionen, die schon auf anderen CPUs durch die L1- oder L2-Bandbreite limitiert sind, nochmal deutlich schlechter als auf allen anderen Architekturen.
- Da gibts dann aber noch eine wichtige Kenngröße: Die Cache-Assoziativität besonders beim L1-Cache. Sprich: Wie viele mögliche Positionen gibt es für eine Cache-Zeile (typischerweise 64 Bytes) im Cache? Nun, wie viele das beim FX sind, weiß ich nicht, ich glaube aber, es sind nur 2. Beim Phenom sind es auch nur 2. Intels CPUs haben mal eben 8 Wege zur Verfügung.
Warum ist das wichtig? Nun, wenn man eine Funktion hat, die mehr als zwei Datenströme verarbeitet, dann kann es passieren, dass sich diese im Cache überlappen und dort Daten herausgeworfen werden, die eigentlich noch gebraucht werden könnten. Das führt dann im schlimmsten Fall dazu, dass ständig irgendwas zwischen L1- und L2-Cache hin und her übertragen wird und die Performance mal eben um 80% in den Keller geht - Stichwort Cache Thrashing. Wieder Vorteil für Intel.
- "Shared" heißt im Bezug auf den L2-Cache beim FX einfach nur, dass die beiden Kerne von einem Modul sich darum prügeln dürfen. Den noch größeren (und noch langsameren) L3-Cache teilen sich dann alle Kerne, L1-Cache hat jeder Kern für sich allein.
- Entsprechend sagen auch die Taktraten wenig aus. Wen eine CPU Ewigkeiten lang auf Daten warten muss, kann sie währenddessen nicht rechnen, da bringt dann auch der Takt nichts mehr. Und das ist nicht das einzige Problem: Eine Addition von zwei Dezimalzahlen und -Vektoren dauert beim FX 6 Takte, beim K10 4 Takte, bei Intel spätestens seit Sandy Bridge 3 Takte, respektive 6, 4, und 5 Takte bei der Multiplikation. Du kannst zwar in jedem Takt ein bis zwei Berechnungen an den Prozessor schicken, wenn du das Ergebnis dann aber verwenden willst (in einer weiteren Berechnung, oder um es abzuspeichern), musst du erstmal wieder warten. Manchmal kann man in der Zeit andere sinnvolle Dinge tun, manchmal aber auch nicht - in dem Fall kann die CPU wieder nichts tun. Da hilft es dem FX da auch wenig, dass er sowohl von Additionen als auch Multiplikationen pro Takt gleich zwei Stück verarbeiten kann, denn spätestens wenn man Multiplikationen und Additionen miteinander vermischt, kann der K10 ebenfalls zwei Befehle pro Takt ausführen, bei Sandy Bridge bin ich mir nicht sicher (war da nicht was, dass nur alle zwei Takte eine Multiplikation durchkommt?), Haswell weiß ich auch nicht so genau, hat aber auf jeden Fall eine Multiplikationseinheit mehr als Sandy Bridge. Großer Vorteil für Intel und selbst der alte Phenom steht nicht selten besser da - siehe Single Core-Test von Cinebench.
- Noch dramatischer wird es, wenn Code ausgeführt wird, der erst einmal anhand irgendwelcher Daten entscheiden muss, was er denn als nächstes tun soll. Sprich: Code mit vielen Sprungbefehlen. Wenn sich in den Sprüngen keine kurzen Muster ergeben, kann die CPU die Sprünge nicht mehr richtig vorhersagen und muss wieder eine ganze Weile warten. Aber auch da ist Intel einfach flotter (14-17 Takte bei einem falsch vorhergesagten Sprung gegen mehr als 20 Takte beim FX und 12-14 Takte beim K10)
- Und letztenendes natürlich die Anbindung an den Arbeitsspeicher. Besonders mit einem Haswell-Chip kann man die DDR3-Speicherbandbreite schon mit einem Kern sehr gut ausnutzen, der FX ist da ne Ecke langsamer, der K10 ist da deutlich langsamer. Mal zum Vergleich: Sequenziell lesend schafft mein X6 auf einem Kern maximal nicht einmal 9 GB/s. Auf allen Kernen sind es immerhin schon 18 GB/s beim verwendeten DDR3-Speicher mit 1333 MHz. Schreibend sind sogar nur 6 bzw. 9GB/s machbar. Für Haswell hab ich keine Vergleichswerte, aber die sind da ne ganze Ecke flotter unterwegs.
TL;DR: Die Aussagekraft von reinen Zahlen strebt bei technischen Produkten ganz gewaltig gegen Null