Ok, streichen wir die Begriffe und halten konkret fest, dass Nehalem und vermutlich Bulldozer bis zum Scheduler 4µOps parallel verarbeiten. O.K.?
Klar
Im Zusammenhang mit Fusion u.s.w. wird auch deutlich, dass diese Angaben mit Vorsicht zu genießen sind. Wie Du schon sagtest, nach dem Decoder gibts keine x86-Ops mehr (sondern nach herrschender Definition RISC-Instruktionen
).
Da Intel µOps und AMD µOps nicht identisch sind, ist also keine Vergleichbarkeit gegeben.
Jo das ist ein tolles Wirrwarr ;-)
Die sind nicht mal so nebenbei in nem Prozessor
AGUs sind genauso wichtig wie ALUs, denn die berechnen die Adressen zum Laden und Speichern. Wenn die Ports sowohl von ALUs als auch AGUs genutzt werden, kann man davon ausgehen, dass etwa 30-50% für AGU genutzt wird, der Rest für ALU - denn keine CPU kann ohne Werte (sinnvoll) rechnen
Lol, ne so meinte ich das nicht. Klar erfüllen die nen Zweck, aber halt sekundär, nicht primär.
FPU und Int kommen sich üblicherweise nicht wirklich in die Quere, daher sind die Ports auch shared.
Ah ok, wusste ich noch nicht
Was sagst Du zu einer FPU Einheit, die von 2 Threads geteilt werden ?
Naja ist eigentlich in dem Fall das gleiche wie bei SMT. Solange die Buffer groß genug sind .. reichts.
Ab ich denke sowohl Intel als auch AMD haben ihre Gründe. Wie bereits erwähnt, die Breite am Backend ist nie zu knapp bei aktuellen CPUs.
Jupp. Bei AMD gefällt mir halt die ALU/AGU Kombination. Deswegen können die µOP Fusion schon im Dekoder machen, und nicht wie bei Intel zuerst aufteilen und dann wieder fusionieren. Aber naja wird alles halt seine Trade-Offs haben.
Naja, wenn mann mehrere Befehle in einem Zyklus ausführen kann, während man ansonsten mehrere Zyklen bräuchte, ist das alles andere als unelegant.
Jo aber die Befehle wurden eine Stufe vorher erst getrennt
Wenn man für SMT Ressourcen fest zuordnet ist das nicht vorteilhaft sondern nachteilig! Daher gibt es feste Aufteilungen nur dann, wenn alles andere nicht möglich oder zu aufwendig ist.
Jein, die Leistung eines einzelnen Threads leidet ein bisschen drunter.
Der Sinn von SMT ist doch, freie Ressourcen zu nutzen. Je flexibler die Aufteilung ist, desto besser funktioniert das.
Jupp, aber AMD will anscheinend 2 Threads ohne negative Auswirkungen in einem Kern unterbringen.
Bei HT kommt sich in der Pipeline nix in die Quere. Der Scheduler gibt dem Thread die Ressourcen, der sie benötigt.
Naja überleg mal, mit 2 Threads kommen milchmädchenhaft gerechnet doppelt soviel µOps in die Puffer. Klar, die max. Breite sind 4 µOps, aber im Mittel werden die jetzt sicher nicht 100% ausgenützt, ansonsten bräuchte man auch kein SMT
Wenn jetzt die ganzen µOps in die Reservation Station fallen, und die gut belegt ist, dann dauert es länger, bis sie an die ALUs/FPU verteilt werden.
Ist ja das Credo von SMT, single Thread Performance opfern, dafür aber den Rechendurchsatz steigern. Nimm z.B. 2 Boinc Work Units. 2 Stück sind da nicht schneller fertig als eine Einzelne. Die einzelne ist schneller berechnet. Aber nach weniger als der doppelten Zeit habe ich mit SMT dafür halt 2 WUs berechnet.
Es wäre doch schade, wenn Thread A auf Daten ausm L2 wartet und Thread B nur 2 Ports nutzen kann, weil die anderen 2 für Thread A reserviert sind obwohl der still steht.
Jo das ist nicht optimal, ist halt der Nachteil, wenn man auf single-thread Leistung optimiert. AMD wird das kleinhalten indem man:
a) Mit 2 D-Caches plant
b) Den 2x2issue Modus nur benützt, wenn es auch was paralleles zu tun gibt, in dem Fall sollte das dann auch der optimale Betriebsmodus sein, ansonsten laufen die beiden Piplines ja gebündelt als eine 4issue Pipeline.
Ich glaube auch nicht, dass AMD das so fest aufteilen wird, außer man will sich die Logik für die dynamische Verteilung im Scheduler sparen.
Ja ich spekulier auch nur
2011 (oder mit Glück 2010, wenn die Opterons früher kommen) sind wir schlauer ;-)
Da das auch Nachteile (komplexe Compiler und großen Code) hat, konnte es sich nicht (für Desktop) durchsetzen. Sh. Itanium.
Wieso, das hat sich doch durchgesetzt ... zähl mal die ganzen ATi Grafikkarten
Mit AMDs Fusion Chips wandert dass dann sogar in die CPU
Ich finde das Konzept prima, auf single-thread getunte x86 Cores + ein paar Hundert VLIW Kernchen für die parallelen Arbeiten ;-)
Wenn man dann seinen Code mit APIs wie RapidMind programmiert ist auch das Entwickeln dafür einfach
- First, convert the numerical types used in the kernel to the equivalent RapidMind types.
- Second, create a RapidMind program object.
- Third, apply the program object to an array of data which will invoke a parallel computation which will be coordinated by the platform's runtime execution manager.
http://www.ibm.com/developerworks/library/pa-rapidmind/
http://www.rapidmind.net
ciao
Alex